TCC-DOC(1) Tiny C Compiler TCC-DOC(1) نام (NAME) tcc - کامپایلر کوچک و سریع C خلاصه دستور (SYNOPSIS) کاربرد: tcc [options] [infile1 infile2...] [-run infile args...] توضیحات (DESCRIPTION) گزینه‌های TCC شباهت بسیار زیادی به گزینه‌های gcc دارند. تفاوت اصلی در این است که TCC می‌تواند برنامهٔ حاصل را مستقیماً اجرا کرده و آرگومان‌های زمان اجرا را نیز به آن منتقل کند. در ادامه چند مثال برای درک منطق کارکرد آورده شده است: "tcc -run a.c" کامپایل a.c و اجرای مستقیم آن "tcc -run a.c arg1" کامپایل a.c و اجرای مستقیم آن. مقدار arg1 به عنوان اولین آرگومان به تابع main() در a.c فرستاده می‌شود. "tcc a.c -run b.c arg1" کامپایل a.c و b.c، پیوند زدن آن‌ها با یکدیگر و اجرای برنامه حاصل. مقدار arg1 به عنوان اولین آرگومان به تابع main() برنامهٔ حاصل داده می‌شود. "tcc -o myprog a.c b.c" کامپایل a.c و b.c، پیوند زدن آن‌ها و تولید فایل اجرایی myprog. "tcc -o myprog a.o b.o" پیوند زدن a.o و b.o با یکدیگر و تولید فایل اجرایی myprog. "tcc -c a.c" کامپایل a.c و تولید فایل شیء (object file) a.o. "tcc -c asmfile.S" پیش‌پردازش با پیش‌پردازندهٔ C، اسمبل کردن asmfile.S و تولید فایل شیء asmfile.o. "tcc -c asmfile.s" اسمبل کردن (بدون پیش‌پردازش) asmfile.s و تولید فایل شیء asmfile.o. "tcc -r -o ab.o a.c b.c" کامپایل a.c و b.c، پیوند زدن آن‌ها با یکدیگر و تولید فایل شیء ab.o. اسکریپت‌نویسی: از TCC می‌توان درست همانند اسکریپت‌های شل در اسکریپت‌ها استفاده کرد. تنها کافی است "#!/usr/local/bin/tcc -run" را در ابتدای کد منبع C خود اضافه کنید: #!/usr/local/bin/tcc -run #include int main() { printf("Hello World\n"); return 0; } TCC می‌تواند در صورت استفاده از - به جای infile، کد منبع C را از ورودی استاندارد بخواند. مثال: echo 'main(){puts("hello");}' | tcc -run - -c تولید یک فایل شیء (object file). -o outfile قرار دادن فایل شیء، فایل اجرایی، یا dll در فایل خروجی outfile. -run source [args...] کامپایل فایل source و اجرای آن با آرگومان‌های خط فرمان args. به منظور امکان ارسال بیش از یک آرگومان به یک اسکریپت، می‌توان چندین گزینه TCC را پس از گزینه -run و با فاصله از هم مشخص کرد: tcc "-run -L/usr/X11R6/lib -lX11" ex4.c در یک اسکریپت، سرآیند زیر را ایجاد می‌کند: #!/usr/local/bin/tcc -run -L/usr/X11R6/lib -lX11 -v نمایش نسخه TCC. -vv نمایش فایل‌های گنجانده‌شده (included). در صورت استفاده به عنوان تنها آرگومان، دایرکتوری‌های جستجو را چاپ می‌کند. گزینه -vvv تلاش‌ها را نیز نمایش می‌دهد. -bench نمایش آمار و اطلاعات کامپایل. گزینه‌های پیش‌پردازنده: -Idir مشخص کردن یک مسیر include اضافی. مسیرهای include به ترتیبی که مشخص شده‌اند جستجو می‌شوند. مسیرهای include سیستمی همواره پس از آن‌ها جستجو می‌شوند. مسیرهای پیش‌فرض include سیستم عبارتند از: /usr/local/include، /usr/include و PREFIX/lib/tcc/include. (PREFIX معمولاً /usr یا /usr/local است). -isystem dir مشخص کردن یک مسیر include سیستمی جهت افزودن به پیش‌فرض‌ها. -nostdinc مسیرهای پیش‌فرض include سیستم جستجو نشوند؛ تنها مسیرهای include ارائه‌شده در خط فرمان جستجو شوند. -include file گنجاندن file در ابتدای هر فایل ورودی. -Dsym[=val] تعریف نماد پیش‌پردازنده sym با مقدار val. اگر val مشخص نشده باشد، مقدار آن 1 خواهد بود. ماکروهای تابع‌گونه را نیز می‌توان تعریف کرد: -DF(a)=a+1 -Usym حذف تعریف نماد پیش‌پردازنده sym. -E تنها پیش‌پردازش انجام شود، به stdout یا فایل (با -o). -P دستورات "#line" در خروجی نوشته نشوند. -P1 نوشتن دستورات جایگزین "#line" در خروجی. -dD, -dM نوشتن دستورات "#define" در خروجی. -Wp,-opt مشابه -opt. پرچم‌های کامپایل: نکته: هر یک از گزینه‌های زیر دارای یک فرم نقیض است که با -fno- شروع می‌شود. -funsigned-char نوع داده "char" بدون علامت (unsigned) باشد. -fsigned-char نوع داده "char" علامت‌دار (signed) باشد. -fno-common عدم تولید نمادهای مشترک (common symbols) برای داده‌های مقداردهی‌نشده. -fleading-underscore افزودن یک زیرخط (underscore) به ابتدای هر نماد C. -fms-extensions اجازه استفاده از افزونه‌های کامپایلر MS C به زبان. در حال حاضر فرض می‌شود اعلان یک ساختار تو‌در‌توی دارای نام اما بدون شناسه، مانند یک ساختار بدون نام رفتار می‌کند. -fdollars-in-identifiers اجازه استفاده از علامت دلار ($) در شناسه‌ها. -freverse-funcargs ارزیابی آرگومان‌های تابع از راست به چپ. -fgnu89-inline "extern inline" مانند "static inline" رفتار کند. -fasynchronous-unwind-tables ایجاد بخش eh_frame [فعال] -ftest-coverage تولید کد پوشش آزمون (code coverage). پس از اجرای کد حاصل، فایلی به نام executable.tcov یا sofile.tcov حاوی پوشش کد تولید می‌شود. گزینه‌های هشدار: -w غیرفعال کردن تمام هشدارها. نکته: هر یک از گزینه‌های هشدار زیر دارای یک فرم نقیض است که با -Wno- شروع می‌شود. -Wimplicit-function-declaration هشدار در صورت اعلان ضمنی تابع (نبود پیش‌نمونه یا prototype). -Wdiscarded-qualifiers هشدار در صورت نادیده گرفته شدن یا حذف const. -Wunsupported هشدار درباره ویژگی‌های پشتیبانی‌نشده GCC که توسط TCC نادیده گرفته می‌شوند. -Wwrite-strings تنظیم نوع ثوابت رشته‌ای به صورت "const char *" به جای "char *". -Werror توقف کامپایل در صورت صدور هشدار. می‌توان گزینه‌ای برای فعال کردن هشدار مشخص و تبدیل آن به خطا تعیین کرد، به عنوان مثال -Werror=unsupported. -Wall فعال‌سازی برخی هشدارهای کاربردی (-Wimplicit-function-declaration، -Wdiscard-qualifiers). گزینه‌های پیونددهنده: -Ldir مشخص کردن یک مسیر اضافی کتابخانه برای گزینه -l. مسیرهای پیش‌فرض کتابخانه عبارتند از /usr/local/lib، /usr/lib و /lib. -lxxx پیوند دادن برنامه با کتابخانه پویای libxxx.so یا کتابخانه ایستای libxxx.a. کتابخانه در مسیرهای مشخص‌شده توسط گزینه -L و متغیر LIBRARY_PATH جستجو می‌شود. -Bdir تعیین مسیری که کتابخانه‌های داخلی tcc (و فایل‌های include) در آن یافت می‌شوند (پیش‌فرض PREFIX/lib/tcc است). -shared تولید یک کتابخانه اشتراکی به جای یک فایل اجرایی. -soname name تنظیم نام کتابخانه اشتراکی برای استفاده در زمان اجرا. -static تولید یک فایل اجرایی با پیوند ایستا (پیش‌فرض، فایل اجرایی با پیوند اشتراکی است). -rdynamic صادر کردن نمادهای سراسری به پیونددهنده پویا. این گزینه زمانی مفید است که یک کتابخانه بازشده با dlopen() نیاز به دسترسی به نمادهای فایل اجرایی داشته باشد. -r تولید یک فایل شیء با ترکیب تمام فایل‌های ورودی. -nostdlib عدم پیوند ضمنی با libc، فایل‌های زمان اجرای C و libtcc1. -Wl,-nostdlib عدم جستجو در مسیرهای پیش‌فرض کتابخانه‌ها (/usr/local/lib، /usr/lib و /lib). تنها مسیرهای مشخص‌شده با -L و LIBRARY_PATH جستجو می‌شوند. -Wl,-rpath=path قرار دادن مسیر جستجوی سفارشی کتابخانه‌های پویا در فایل اجرایی. -Wl,-Ipath -Wl,--dynamic-linker=path تنظیم مفسر ELF (پیونددهنده پویا). پیش‌فرض آن برابر مقدار متغیر محیطی LD_SO (در صورت تنظیم) یا مقدار پیش‌فرض داخلی است. -Wl,--enable-new-dtags هنگام قرار دادن مسیر جستجوی سفارشی کتابخانه‌های پویا در فایل اجرایی، ایجاد تگ پویای جدید ELF یعنی DT_RUNPATH به جای تگ قدیمی DT_RPATH..IP -Wl,--oformat=fmt 4 استفاده از fmt به‌عنوان قالب خروجی. قالب‌های خروجی پشتیبانی‌شده عبارتند از: "elf32-i386" قالب خروجی ELF (پیش‌فرض) "binary" تصویر باینری (تنها برای خروجی اجرایی) "coff" قالب خروجی COFF (تنها برای خروجی اجرایی مقصد TMS320C67xx) -Wl,--export-all-symbols -Wl,--export-dynamic برون‌ریزی نمادهای سراسری به پیونددهندهٔ پویا (dynamic linker). این گزینه زمانی مفید است که یک کتابخانهٔ بازشده با dlopen() نیاز به دسترسی به نمادهای فایل اجرایی داشته باشد. -Wl,-subsystem=console/gui/wince/... تنظیم نوع برای فایل‌های اجرایی PE (ویندوز). -Wl,-[Ttext=# | section-alignment=# | file-alignment=# | image-base=# | stack=#] تغییر چیدمان (layout) فایل اجرایی. -Wl,-Bsymbolic تنظیم برچسب DT_SYMBOLIC. -Wl,-(no-)whole-archive فعال/غیرفعال کردن پیوند دادن تمامی آبجکت‌ها در آرشیوها. گزینه‌های اشکال‌زدا (Debugger): -g تولید اطلاعات اشکال‌زدایی زمان اجرای stab تا پیام‌های خطای زمان اجرای واضح‌تری دریافت کنید: " test.c:68: in function 'test5()': dereferencing invalid pointer" به‌جای پیام مختصر و مبهم "Segmentation fault". -gdwarf[-x] تولید اطلاعات اشکال‌زدایی زمان اجرای dwarf به‌جای اطلاعات اشکال‌زدایی stab. -b تولید کدهای پشتیبان اضافی برای بررسی تخصیص‌های حافظه و محدوده‌های آرایه/اشاره‌گر. گزینهٔ -g به‌طور ضمنی اعمال می‌شود. -bt[N] نمایش N فراخواننده در ردگیری پشته (stack trace). این گزینه همراه با -g یا -b مفید است. هنگام فعال بودن، "__TCC_BACKTRACE__" تعریف می‌شود. در فایل‌های اجرایی، پشتیبانی مضاعف برای ردگیری پشته گنجانده شده است. تابع " int tcc_backtrace(const char *fmt, ...); " ارائه شده است تا در صورت نیاز بتوان یک ردگیری پشته را به همراه یک پیام راه‌اندازی کرد. گزینه‌های متفرقه: -std=version تعریف "__STDC_VERSION__": مقدار 201112 اگر version برابر با c11 یا gnu11 باشد؛ در غیر این صورت 199901. -x[c|a|b|n] مشخص کردن نوع محتوای فایل ورودی بعدی: به‌ترتیب C، اسمبلی (assembly)، باینری (binary)، یا هیچ‌کدام (none). -O[n] مشابه با -D__OPTIMIZE__ به‌جز برای -O0. -pthread پیش‌پردازش با -D_REENTRANT و پیوند با -lpthread. -M تنها خروجی دادن قطعه‌کد makefile شامل وابستگی‌ها. -MM مشابه -M به‌جز اینکه تنها فایل‌های سرآیند کاربر را ذکر می‌کند، نه فایل‌های سرآیند سیستم را. -MD تولید قطعه‌کد makefile به همراه وابستگی‌ها. -MMD مشابه -MD به‌جز اینکه تنها فایل‌های سرآیند کاربر را ذکر می‌کند، نه فایل‌های سرآیند سیستم را. -MF depfile استفاده از depfile به‌عنوان خروجی برای -MD. -MP قید کردن تمامی وابستگی‌ها به‌عنوان هدف (target). -print-search-dirs چاپ دایرکتوری نصب پیکربندی‌شده و فهرستی از دایرکتوری‌های کتابخانه و include که tcc در آن‌ها جستجو خواهد کرد. -dumpversion چاپ نسخه. -dt همراه با -run/-E: تعریف خودکار ماکروهای 'test_...' گزینه‌های ویژهٔ معماری مقصد (Target): -mms-bitfields استفاده از الگوریتمی برای تراز فیلدهای بیتی (bitfield) که با MSVC سازگار باشد. حالت پیش‌فرض الگوریتم gcc است. -mfloat-abi (ARM only) انتخاب ABI ممیز شناور. مقادیر ممکن: "softfp" و "hard" -mno-sse عدم استفاده از ثبات‌های sse در معماری x86_64. -m32, -m64 ارسال خط فرمان به کامپایلر متقاطع (cross compiler) i386/x86_64. نکته: گزینه‌های GCC شامل -fx و -mx نادیده گرفته می‌شوند..SH "محیط (ENVIRONMENT)" متغیرهای محیطی که بر نحوه کارکرد tcc اثر می‌گذارند. CPATH C_INCLUDE_PATH فهرستی از دایرکتوری‌های جداشده با دونقطه (:) که برای فایل‌های include جستجو می‌شوند؛ دایرکتوری‌هایی که با -I مشخص شده‌اند، ابتدا جستجو می‌شوند. LIBRARY_PATH فهرستی از دایرکتوری‌های جداشده با دونقطه (:) که برای کتابخانه‌های مربوط به گزینهٔ -l جستجو می‌شوند؛ دایرکتوری‌هایی که با -L مشخص شده‌اند، ابتدا جستجو می‌شوند. همچنین ببینید (SEE ALSO) cpp(1), gcc(1) نویسندگان (AUTHORS) Fabrice Bellard 0.9.28rc 2026-02-02 TCC-DOC(1)