.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "CLANG" "1" "Jun 21, 2026" "22" "Clang" .SH "نام (NAME)" clang \- کامپایلر زبان‌های C، C++ و Objective\-C .SH "خلاصه دستور (SYNOPSIS)" .sp \fBclang\fP [\fIگزینه‌ها\fP] \fIنام_فایل ...\fP .SH "توضیحات (DESCRIPTION)" .sp \fBclang\fP یک کامپایلر برای زبان‌های C، C++ و Objective\-C است که مراحل پیش‌پردازش، تجزیه (parsing)، بهینه‌سازی، تولید کد، اسمبلی و پیوند (linking) را در بر می‌گیرد. بسته به اینکه کدام حالت سطح‌بالا تعیین شده باشد، Clang پیش از اجرای یک پیوند کامل متوقف خواهد شد. اگرچه Clang به صورت بسیار یکپارچه طراحی شده است، اما برای درک نحوه فراخوانی آن، شناخت مراحل کامپایل اهمیت دارد. این مراحل عبارتند از: .INDENT 0.0 .TP .B راه‌انداز (Driver) فایل اجرایی clang در واقع یک راه‌انداز کوچک است که اجرای کلی سایر ابزارها مانند کامپایلر، اسمبلر و پیونددهنده را کنترل می‌کند. به طور معمول نیازی به تعامل مستقیم با این راه‌انداز ندارید، بلکه برای اجرای سایر ابزارها به صورت شفاف از آن استفاده می‌کنید. .TP .B پیش‌پردازش (Preprocessing) این مرحله نشانه‌گذاری (tokenization) فایل منبع ورودی، بسط ماکروها، بسط #include و مدیریت سایر دستورات پیش‌پردازنده را بر عهده دارد. خروجی این مرحله معمولاً فایلی با پسوند \(dq.i\(dq (برای C)، \(dq.ii\(dq (برای C++)، \(dq.mi\(dq (برای Objective\-C) یا \(dq.mii\(dq (برای Objective\-C++) نامیده می‌شود. .TP .B تجزیه و تحلیل معنایی (Parsing and Semantic Analysis) این مرحله فایل ورودی را تجزیه کرده و نشانه‌های پیش‌پردازنده را به یک درخت تجزیه تبدیل می‌کند. پس از تبدیل به شکل درخت تجزیه، تحلیل معنایی را برای محاسبه انواع داده در عبارت‌ها و همچنین تعیین خوش‌ساخت بودن کد اعمال می‌نماید. این مرحله مسئول ایجاد اکثر هشدارهای کامپایلر و همچنین خطاهای تجزیه است. خروجی این مرحله یک «درخت نحو انتزاعی» (\(dqAbstract Syntax Tree\(dq یا AST) است. .TP .B تولید و بهینه‌سازی کد (Code Generation and Optimization) این مرحله AST را به کد واسط سطح‌پایین (معروف به \(dqLLVM IR\(dq) و در نهایت به کد ماشین ترجمه می‌کند. این فاز مسئول بهینه‌سازی کد تولیدشده و مدیریت تولید کد مختص معماری مقصد است. خروجی این مرحله معمولاً یک فایل \(dq.s\(dq یا فایل \(dqassembly\(dq نامیده می‌شود. .sp همچنین Clang از یک اسمبلر یکپارچه پشتیبانی می‌کند که در آن تولیدکننده کد مستقیماً فایل‌های شیء را تولید می‌کند. این امر از سربار تولید فایل \(dq.s\(dq و فراخوانی اسمبلر مقصد جلوگیری می‌نماید. .TP .B اسمبلر (Assembler) این مرحله اسمبلر مقصد را اجرا می‌کند تا خروجی کامپایلر را به یک فایل شیء مقصد تبدیل کند. خروجی این مرحله معمولاً یک فایل \(dq.o\(dq یا فایل \(dqobject\(dq نامیده می‌شود. .TP .B پیونددهنده (Linker) این مرحله پیونددهنده مقصد را اجرا می‌کند تا چندین فایل شیء را در یک فایل اجرایی یا کتابخانه پویا ادغام نماید. خروجی این مرحله معمولاً یک فایل \(dqa.out\(dq، \(dq.dylib\(dq یا \(dq.so\(dq نامیده می‌شود. .UNINDENT .sp \fBتحلیل‌گر ایستای Clang (Clang Static Analyzer)\fP .sp تحلیل‌گر ایستای Clang ابزاری است که کد منبع را به منظور یافتن اشکالات (باگ‌ها) از طریق تحلیل کد پویش می‌کند. این ابزار از بخش‌های متعددی از Clang استفاده می‌کند و درون همان راه‌انداز تعبیه شده است. لطفاً برای جزئیات بیشتر در مورد نحوه استفاده از این ابزار به مراجعه کنید. .SH "گزینه‌ها (OPTIONS)" .SS "گزینه‌های انتخاب مرحله (Stage Selection Options)" .INDENT 0.0 .TP .B \-E اجرای مرحله پیش‌پردازش. .UNINDENT .INDENT 0.0 .TP .B \-fsyntax\-only اجرای مراحل پیش‌پردازش، تجزیه‌کننده و تحلیل معنایی. .UNINDENT .INDENT 0.0 .TP .B \-S اجرای مراحل پیشین به‌همراه مراحل تولید و بهینه‌سازی LLVM و تولید کد مختص مقصد، که منجر به تولید یک فایل اسمبلی می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-c اجرای تمام مراحل فوق، به اضافه اسمبلر، جهت تولید فایل شیء مقصد \(dq.o\(dq. .UNINDENT .INDENT 0.0 .TP .B بدون گزینه انتخاب مرحله (no stage selection option) در صورتی که هیچ گزینه‌ای برای انتخاب مرحله تعیین نشود، تمام مراحل بالا اجرا شده و سپس پیونددهنده برای ترکیب نتایج در یک فایل اجرایی یا کتابخانه اشتراکی فراخوانی می‌شود. .UNINDENT.SS گزینه‌های انتخاب زبان و حالت .INDENT 0.0 .TP .B \-x فایل‌های ورودی بعدی را از نوع language در نظر می‌گیرد. .UNINDENT .INDENT 0.0 .TP .B \-std= استاندارد زبانی را که باید برای آن کامپایل شود مشخص می‌کند. .sp مقادیر پشتیبانی‌شده برای زبان C عبارت‌اند از: .INDENT 7.0 .INDENT 3.5 .nf \fBc89\fP \fBc90\fP \fBiso9899:1990\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 1990 .UNINDENT .UNINDENT .nf \fBiso9899:199409\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 1990 به‌همراه اصلاحیه ۱ .UNINDENT .UNINDENT .nf \fBgnu89\fP \fBgnu90\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 1990 به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc99\fP \fBiso9899:1999\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 1999 .UNINDENT .UNINDENT .nf \fBgnu99\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 1999 به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc11\fP \fBiso9899:2011\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 2011 .UNINDENT .UNINDENT .nf \fBgnu11\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 2011 به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc17\fP \fBiso9899:2017\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 2017 .UNINDENT .UNINDENT .nf \fBgnu17\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 2017 به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc23\fP \fBiso9899:2024\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 2023 .UNINDENT .UNINDENT .nf \fBgnu23\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 2023 به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc2y\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 202y .UNINDENT .UNINDENT .nf \fBgnu2y\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C 202y به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp استاندارد پیش‌فرض زبان C مقدار \fBgnu17\fP است، به‌جز در PS4 که \fBgnu99\fP است\&. .sp مقادیر پشتیبانی‌شده برای زبان C++ عبارت‌اند از: .INDENT 7.0 .INDENT 3.5 .nf \fBc++98\fP \fBc++03\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 1998 به‌همراه اصلاحیه‌ها .UNINDENT .UNINDENT .nf \fBgnu++98\fP \fBgnu++03\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 1998 به‌همراه اصلاحیه‌ها و افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc++11\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2011 به‌همراه اصلاحیه‌ها .UNINDENT .UNINDENT .nf \fBgnu++11\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2011 به‌همراه اصلاحیه‌ها و افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc++14\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2014 به‌همراه اصلاحیه‌ها .UNINDENT .UNINDENT .nf \fBgnu++14\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2014 به‌همراه اصلاحیه‌ها و افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc++17\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2017 به‌همراه اصلاحیه‌ها .UNINDENT .UNINDENT .nf \fBgnu++17\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2017 به‌همراه اصلاحیه‌ها و افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc++20\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2020 به‌همراه اصلاحیه‌ها .UNINDENT .UNINDENT .nf \fBgnu++20\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2020 به‌همراه اصلاحیه‌ها و افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc++23\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2023 به‌همراه اصلاحیه‌ها .UNINDENT .UNINDENT .nf \fBgnu++23\fP .fi .sp .INDENT 0.0 .INDENT 3.5 ISO C++ 2023 به‌همراه اصلاحیه‌ها و افزونه‌های GNU .UNINDENT .UNINDENT .nf \fBc++2c\fP .fi .sp .INDENT 0.0 .INDENT 3.5 پیش‌نویس کاری برای C++2c .UNINDENT .UNINDENT .nf \fBgnu++2c\fP .fi .sp .INDENT 0.0 .INDENT 3.5 پیش‌نویس کاری برای C++2c به‌همراه افزونه‌های GNU .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp استاندارد پیش‌فرض زبان C++ مقدار \fBgnu++17\fP است\&. .sp مقادیر پشتیبانی‌شده برای زبان OpenCL عبارت‌اند از: .INDENT 7.0 .INDENT 3.5 .nf \fBcl1.0\fP .fi .sp .INDENT 0.0 .INDENT 3.5 OpenCL 1.0 .UNINDENT .UNINDENT .nf \fBcl1.1\fP .fi .sp .INDENT 0.0 .INDENT 3.5 OpenCL 1.1 .UNINDENT .UNINDENT .nf \fBcl1.2\fP .fi .sp .INDENT 0.0 .INDENT 3.5 OpenCL 1.2 .UNINDENT .UNINDENT .nf \fBcl2.0\fP .fi .sp .INDENT 0.0 .INDENT 3.5 OpenCL 2.0 .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp استاندارد پیش‌فرض زبان OpenCL مقدار \fBcl1.0\fP است\&. .sp مقادیر پشتیبانی‌شده برای زبان CUDA عبارت‌اند از: .INDENT 7.0 .INDENT 3.5 .nf \fBcuda\fP .fi .sp .INDENT 0.0 .INDENT 3.5 NVIDIA CUDA(tm) .UNINDENT .UNINDENT .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0.TP .B \-stdlib= کتابخانه استاندارد C++ مورد استفاده را مشخص می‌کند؛ گزینه‌های پشتیبانی‌شده libstdc++ و libc++ هستند. در صورت عدم تعیین، پیش‌فرض پلتفرم استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B \-rtlib= کتابخانه زمان اجرای کامپایلر (runtime library) مورد استفاده را مشخص می‌کند؛ گزینه‌های پشتیبانی‌شده libgcc و compiler\-rt هستند. در صورت عدم تعیین، پیش‌فرض پلتفرم استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B \-ansi مشابه \-std=c89 است. .UNINDENT .INDENT 0.0 .TP .B \-ObjC, \-ObjC++ با فایل‌های ورودی منبع به ترتیب به عنوان ورودی‌های Objective\-C و Objective\-C++ رفتار می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-trigraphs سه‌نگاره‌ها (trigraphs) را فعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-ffreestanding مشخص می‌کند که فایل باید برای یک محیط مستقل (freestanding) و نه یک محیط میزبان (hosted) کامپایل شود. توجه داشته باشید که ساخت مستقل همچنان نیازمند پیوند دادن (link) با یک کتابخانه استاندارد C است که از رابط‌های مستقل برای حالت زبان و محیط هدفِ مشخص‌شده پشتیبانی کند. این شامل توابعی مانند \fImemcpy\fP، \fImemmove\fP و \fImemset\fP است. .UNINDENT .INDENT 0.0 .TP .B \-fno\-builtin رفتار ویژه و بهینه‌سازی‌های توابع شناخته‌شده کتابخانه، مانند \fBstrlen()\fP و \fBmalloc()\fP را غیرفعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fno\-builtin\- رفتار ویژه و بهینه‌سازی‌ها را برای تابع مشخصی از کتابخانه غیرفعال می‌کند. برای مثال، \fB\-fno\-builtin\-strlen\fP هرگونه رفتار ویژه برای تابع کتابخانه‌ای \fBstrlen()\fP را حذف می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fno\-builtin\-std\- رفتار ویژه و بهینه‌سازی‌ها را برای تابع مشخصی از کتابخانه استاندارد C++ در فضای نام \fBstd\fP غیرفعال می‌کند. برای مثال، \fB\-fno\-builtin\-std\-move_if_noexcept\fP هرگونه رفتار ویژه برای تابع کتابخانه‌ای \fBstd::move_if_noexcept()\fP را حذف می‌کند. .sp برای توابع کتابخانه استاندارد C که کتابخانه استاندارد C++ نیز آن‌ها را در فضای نام \fBstd\fP ارائه می‌دهد، به جای آن از \fB\-fno\-builtin\-\fP استفاده کنید. .UNINDENT .INDENT 0.0 .TP .B \-fmath\-errno مشخص می‌کند که باید با توابع ریاضی به گونه‌ای رفتار شود که \fBerrno\fP را به‌روزرسانی کنند. .UNINDENT .INDENT 0.0 .TP .B \-fpascal\-strings پشتیبانی از رشته‌های سبک پاسکال را با الگوی \(dq\epfoo\(dq فعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fms\-extensions پشتیبانی از افزونه‌های مایکروسافت (Microsoft extensions) را فعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fmsc\-version= مقدار \fB_MSC_VER\fP را تنظیم می‌کند. در ویندوز، پیش‌فرض این مقدار برابر با نسخه فعلیِ نصب‌شده از cl.exe، یا \fB1933\fP است. در غیر این صورت تنظیم نمی‌شود. .UNINDENT .INDENT 0.0 .TP .B \-fborland\-extensions پشتیبانی از افزونه‌های بورلند (Borland extensions) را فعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fwritable\-strings تمام رشته‌های لیتِرال (string literals) را به طور پیش‌فرض قابل نوشتن قرار می‌دهد. این کار یکتاسازی رشته‌ها (uniquing) و سایر بهینه‌سازی‌ها را غیرفعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-flax\-vector\-conversions, \-flax\-vector\-conversions=, \-fno\-lax\-vector\-conversions قوانین آسان‌گیرانه بررسی نوع را برای تبدیل‌های ضمنی بردارها مجاز می‌کند. مقادیر ممکن برای : .INDENT 7.0 .IP \(bu 2 \fBnone\fP: هیچ تبدیل ضمنی بین بردارها مجاز نیست .IP \(bu 2 \fBinteger\fP: تبدیل‌های بیتی ضمنی (implicit bitcasts) بین بردارهای صحیحی که عرض بیت کل یکسانی دارند مجاز است .IP \(bu 2 \fBall\fP: تبدیل‌های بیتی ضمنی بین هر بردارهایی با عرض بیت کل یکسان مجاز است .UNINDENT .sp در صورت عدم تعیین، مقدار پیش‌فرض برابر با \fBinteger\fP است. .UNINDENT .INDENT 0.0 .TP .B \-fblocks ویژگی زبانی \(dqBlocks\(dq را فعال می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fobjc\-abi\-version=version نسخه ABI مورد استفاده برای Objective\-C را انتخاب می‌کند. نسخه‌های موجود عبارتند از 1 (ABI موروثی و شکننده \(dqfragile\(dq)، 2 (ABI غیرشکننده 1)، و 3 (ABI غیرشکننده 2). .UNINDENT .INDENT 0.0 .TP .B \-fobjc\-nonfragile\-abi\-version= نسخه ABI غیرشکننده Objective\-C را برای استفاده به عنوان پیش‌فرض انتخاب می‌کند. این مقدار تنها زمانی به عنوان ABI زبان Objective\-C استفاده خواهد شد که ABI غیرشکننده فعال باشد (خواه از طریق \fB\-fobjc\-nonfragile\-abi\fP، یا به دلیل این‌که پیش‌فرض پلتفرم است). .UNINDENT .INDENT 0.0 .TP .B \-fobjc\-nonfragile\-abi, \-fno\-objc\-nonfragile\-abi استفاده از ABI غیرشکننده Objective\-C را فعال می‌کند. در پلتفرم‌هایی که این گزینه ABI پیش‌فرض است، می‌توان آن را با \fB\-fno\-objc\-nonfragile\-abi\fP غیرفعال کرد. .UNINDENT.SS "گزینه‌های انتخاب هدف (Target Selection Options)" .sp Clang به‌طور کامل و به عنوان بخشی ذاتی از معماری خود از کامپایل متقاطع (cross compilation) پشتیبانی می‌کند. بسته به نحوه پیکربندی نسخه Clang شما، ممکن است از چندین کامپایلر متقاطع پشتیبانی کند، یا فقط از یک هدف بومی (native) پشتیبانی نماید. .INDENT 0.0 .TP .B \-arch معماری مد نظر برای ساخت را مشخص می‌کند (مختص Mac OS X). .UNINDENT .INDENT 0.0 .TP .B \-target معماری مد نظر برای ساخت را مشخص می‌کند (تمامی پلتفرم‌ها). .UNINDENT .INDENT 0.0 .TP .B \-mmacos\-version\-min= هنگام ساخت برای macOS، حداقل نسخه پشتیبانی‌شده توسط برنامه شما را مشخص می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-miphoneos\-version\-min هنگام ساخت برای iPhone OS، حداقل نسخه پشتیبانی‌شده توسط برنامه شما را مشخص می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-\دprint\-supported\-cpus فهرستی از پردازنده‌های پشتیبانی‌شده برای هدف داده‌شده (که از طریق \fB\-\-target=\fP یا \fB\-arch\fP \fB\fP مشخص می‌شود) را چاپ می‌کند. اگر هیچ هدفی مشخص نشود، از هدف پیش‌فرض سیستم استفاده خواهد شد. .UNINDENT .INDENT 0.0 .TP .B \-mcpu=?, \-mtune=? به عنوان یک نام مستعار برای \fB\-\-print\-supported\-cpus\fP\& عمل می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-mcpu=help, \-mtune=help به عنوان یک نام مستعار برای \fB\-\-print\-supported\-cpus\fP\& عمل می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-march= مشخص می‌کند که Clang باید برای یک عضو خاص از خانواده پردازنده‌ها و مدل‌های پس از آن کد تولید کند. برای مثال، اگر \-march=i486 را مشخص کنید، کامپایلر مجاز است دستورالعمل‌هایی را تولید کند که روی i486 و پردازنده‌های پس از آن معتبر هستند، اما ممکن است در پردازنده‌های پیش از آن وجود نداشته باشند. .UNINDENT .INDENT 0.0 .TP .B \-\-print\-enabled\-extensions فهرست افزونه‌هایی (extensions) را که برای هدف تعیین‌شده توسط ترکیبی از مقادیر \fI\-\-target\fP، \fI\-march\fP و \fI\-mcpu\fP فعال هستند، چاپ می‌کند. در حال حاضر، این گزینه تنها روی AArch64 و RISC\-V پشتیبانی می‌شود. روی RISC\-V، این گزینه همچنین رشته ISA افزونه‌های فعال‌شده را چاپ می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-\-print\-supported\-extensions فهرست تمام افزونه‌های پشتیبانی‌شده را برای هر پردازنده هدفِ یک معماری (که از طریق \fB\-\-target=\fP یا \fB\-arch\fP \fB\fP مشخص می‌شود) چاپ می‌کند. اگر هیچ هدفی مشخص نشود، از هدف پیش‌فرض سیستم استفاده خواهد شد. در حال حاضر، این گزینه فقط روی AArch64 و RISC\-V پشتیبانی می‌شود. .UNINDENT .SS "گزینه‌های تولید کد (Code Generation Options)" .INDENT 0.0 .TP .B \-O0, \-O1, \-O2, \-O3, \-Ofast, \-Os, \-Oz, \-Og, \-O, \-O4 سطح بهینه‌سازی مورد استفاده را مشخص می‌کند: .INDENT 7.0 .INDENT 3.5 \fB\-O0\fP به معنای \(dqبدون بهینه‌سازی\(dq است: این سطح سریع‌ترین زمان کامپایل را داشته و کدی با بیشترین قابلیت اشکال‌زدایی تولید می‌کند. .sp \fB\-O1\fP جایی میان \fB\-O0\fP و \fB\-O2\fP\&. .sp \fB\-O2\fP سطح متوسطی از بهینه‌سازی که اکثر بهینه‌سازی‌ها را فعال می‌کند. .sp \fB\-O3\fP شبیه \fB\-O2\fP، با این تفاوت که بهینه‌سازی‌هایی را فعال می‌کند که اجرای آن‌ها زمان بیشتری می‌برد یا ممکن است کدهای بزرگ‌تری تولید کنند (به امید اینکه برنامه سریع‌تر اجرا شود). .sp \fB\-Ofast\fP تمام بهینه‌سازی‌های \fB\-O3\fP را به همراه بهینه‌سازی‌های تهاجمی دیگری که ممکن است انطباق دقیق با استانداردهای زبان را نقض کنند فعال می‌کند. این گزینه در Clang 19 منسوخ شده است و هشداری صادر می‌شود مبنی بر اینکه اگر رفتار ریاضیاتی غیراستاندارد مد نظر است، باید از ترکیب \fB\-O3\fP با \fB\-ffast\-math\fP \%<#\:cmdoption-ffast-math> استفاده شود. هنوز زمان‌بندی مشخصی برای حذف آن وجود ندارد؛ هدف، جلوگیری از استفاده از \fB\-Ofast\fP به دلیل رفتار غیرمنتظره یک پرچم بهینه‌سازی است که رفتار قابل‌مشاهده کد صحیح را تغییر می‌دهد. .sp \fB\-Os\fP شبیه \fB\-O2\fP به همراه بهینه‌سازی‌های اضافه جهت کاهش حجم کد. .sp \fB\-Oz\fP شبیه \fB\-Os\fP (و در نتیجه \fB\-O2\fP)، اما حجم کد را بیش از پیش کاهش می‌دهد. .sp \fB\-Og\fP مشابه \fB\-O1\fP، اما با بهینه‌سازی اندکی کمتر و دیدپذیری بهتر متغیرها. همان بهینه‌سازی‌های \fB\-O1\fP اجرا می‌شوند، اما پرچم \fB\-fextend\-variable\-liveness\fP نیز تنظیم می‌شود که تلاش می‌کند از کاهش زنده‌بودن (liveness) متغیرهای کاربر توسط بهینه‌سازی‌ها جلوگیری کرده و در دسترس بودن آن‌ها را هنگام اشکال‌زدایی بهبود بخشد. .sp \fB\-O\fP معادل \fB\-O1\fP\&. .sp \fB\-O4\fP و بالاتر .INDENT 0.0 .INDENT 3.5 در حال حاضر معادل \fB\-O3\fP است. .UNINDENT .UNINDENT .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B \-g, \-gline\-tables\-only, \-gmodules خروجی اطلاعات اشکال‌زدایی را کنترل می‌کند. توجه داشته باشید که اطلاعات اشکال‌زدایی Clang در \fB\-O0\fP بهترین کارایی را دارد. هنگامی که بیش از یک گزینه شروع‌شونده با \fI\-g\fP مشخص شود، آخرین گزینه اعمال خواهد شد: .INDENT 7.0 .INDENT 3.5 \fB\-g\fP اطلاعات اشکال‌زدایی تولید می‌کند. .sp \fB\-gline\-tables\-only\fP فقط اطلاعات جدول خطوط اشکال‌زدایی را تولید می‌کند. این گزینه امکان ردیابی نمادین پشته (backtrace) با اطلاعات درون‌خطی‌سازی (inlining) را فراهم می‌آورد، اما شامل هیچ اطلاعاتی درباره متغیرها، مکان‌ها یا انواع آن‌ها نمی‌شود. .sp \fB\-gmodules\fP اطلاعات اشکال‌زدایی را تولید می‌کند که حاوی ارجاعات خارجی به انواع تعریف‌شده در ماژول‌های Clang یا هدرهای از پیش کامپایل‌شده (precompiled headers) است، به‌جای اینکه اطلاعات تکراری انواع اشکال‌زدایی را در هر فایل شیء (object file) قرار دهد. این گزینه قالب ماژول Clang را به‌طور شفاف به محفظه‌های فایل شیء تغییر می‌دهد که ماژول Clang را به همراه اطلاعات اشکال‌زدایی نگهداری می‌کنند. هنگام کامپایل برنامه‌ای که از ماژول‌های Clang یا هدرهای از پیش کامپایل‌شده استفاده می‌کند، این گزینه اطلاعات اشکال‌زدایی کامل را با زمان‌های کامپایل سریع‌تر و فایل‌های شیء بسیار کوچک‌تر تولید می‌کند. .sp این گزینه نباید هنگام ساخت کتابخانه‌های ایستا برای توزیع روی ماشین‌های دیگر استفاده شود، زیرا اطلاعات اشکال‌زدایی حاوی ارجاعاتی به حافظه موقت (cache) ماژول در ماشینی خواهد بود که فایل‌های شیء کتابخانه در آن ساخته شده‌اند. .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B \-fstandalone\-debug \-fno\-standalone\-debug Clang از تعدادی بهینه‌سازی برای کاهش حجم اطلاعات اشکال‌زدایی در فایل باینری پشتیبانی می‌کند. این بهینه‌سازی‌ها بر اساس این فرض کار می‌کنند که اطلاعات نوعِ اشکال‌زدایی می‌توانند در چندین واحد کامپایل (compilation units) پخش شوند. به عنوان مثال، Clang تعاریف نوع را برای انواعی که توسط یک ماژول نیاز نیستند و می‌توانند با یک اعلان رو به جلو (forward declaration) جایگزین شوند، تولید نخواهد کرد. علاوه بر این، Clang فقط اطلاعات نوع را برای یک کلاس پویای C++ در ماژولی صادر می‌کند که شامل vtable آن کلاس باشد. .sp گزینه \fB\-fstandalone\-debug\fP این بهینه‌سازی‌ها را خاموش می‌کند. این امر هنگام کار با کتابخانه‌های شخص ثالث که همراه با اطلاعات اشکال‌زدایی ارائه نمی‌شوند مفید است. این حالت در Darwin پیش‌فرض است. توجه داشته باشید که Clang هرگز اطلاعات نوع را برای انواعی که اصلاً توسط برنامه ارجاع داده نشده‌اند، تولید نخواهد کرد. .UNINDENT .INDENT 0.0 .TP .B \-feliminate\-unused\-debug\-types به‌طور پیش‌فرض، Clang اطلاعات نوع را برای انواعی که تعریف شده اما در برنامه استفاده نشده‌اند تولید نمی‌کند. برای حفظ اطلاعات اشکال‌زدایی برای این انواع استفاده‌نشده، می‌توان از نقیض آن یعنی \fB\-fno\-eliminate\-unused\-debug\-types\fP استفاده کرد. .UNINDENT .INDENT 0.0 .TP .B \-fexceptions امکان پرتاب استثناها (exceptions) از طریق قاب‌های پشته (stack frames) کامپایل‌شده با Clang را فراهم می‌کند (در بسیاری از اهداف، این پرچم اطلاعات بازپیچی پشته (unwind) را برای توابعی که ممکن است استثنا از طریق آن‌ها پرتاب شود فعال می‌کند). برای بیشتر اهداف، این ویژگی به‌طور پیش‌فرض برای C++ فعال است. .UNINDENT .INDENT 0.0 .TP .B \-ftrapv کدی برای به دام انداختن خطاهای سرریز عدد صحیح (integer overflow) تولید می‌کند. سرریز عدد صحیح علامت‌دار در C رفتاری تعریف‌نشده (undefined) است. با این پرچم، کد اضافی تولید می‌شود تا این مورد را شناسایی کرده و هنگام رخ دادن آن، برنامه را متوقف کند (abort). .UNINDENT .INDENT 0.0 .TP .B \-fvisibility این پرچم، سطح دیدپذیری (visibility) پیش‌فرض را تعیین می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fcommon, \-fno\-common این پرچم مشخص می‌کند که متغیرهای فاقد مقداردهی اولیه، پیوند مشترک (common linkage) دریافت کنند. این رفتار را می‌توان با \fB\-fno\-common\fP غیرفعال کرد. .UNINDENT .INDENT 0.0.TP .B \-ftls\-model= مدل پیش‌فرض ذخیره‌سازی محلی رشته (TLS) را برای استفاده در متغیرهای محلی رشته تعیین می‌کند. مقادیر معتبر عبارتند از: \(dqglobal\-dynamic\(dq، \(dqlocal\-dynamic\(dq، \(dqinitial\-exec\(dq و \(dqlocal\-exec\(dq. مقدار پیش‌فرض \(dqglobal\-dynamic\(dq است. مدل پیش‌فرض را می‌توان با ویژگی tls_model بازنویسی کرد. کامپایلر در صورت امکان تلاش خواهد کرد مدلی کارآمدتر را انتخاب کند. .UNINDENT .INDENT 0.0 .TP .B \-flto, \-flto=full, \-flto=thin, \-emit\-llvm تولید فایل‌های خروجی در قالب‌های LLVM، مناسب برای بهینه‌سازی زمان پیوند (LTO). هنگامی که همراه با \fB\-S\fP استفاده شود، فایل‌های اسمبلی زبان میانی LLVM را تولید می‌کند؛ در غیر این صورت، فایل‌های شیء با قالب بیت‌کد LLVM تولید می‌شوند (که ممکن است بسته به گزینه‌های انتخاب مرحله، به پیونددهنده ارسال شوند). .sp مقدار پیش‌فرض برای \fB\-flto\fP برابر \(dqfull\(dq است که در آن بیت‌کد LLVM برای بهینه‌سازی یکپارچه زمان پیوند (LTO) مناسب است، به‌طوری که پیونددهنده تمام چنین ماژول‌هایی را برای بهینه‌سازی در یک ماژول واحد ادغام می‌کند. با انتخاب \(dqthin\(dq، کامپایل با ThinLTO \%<> در عوض فراخوانی می‌شود. .sp \fBنکته:\fP .INDENT 7.0 .INDENT 3.5 در Darwin، هنگام استفاده از \fB\-flto\fP به همراه \fB\-g\fP و کامپایل و پیوند در مراحل مجزا، همچنین لازم است گزینه \fB\-Wl,\-object_path_lto,.o\fP را در مرحله پیوند ارسال کنید تا به پیونددهنده ld64 دستور دهد فایل شیء موقت تولیدشده در حین بهینه‌سازی زمان پیوند را حذف نکند (در صورتی که کامپایل و پیوند در یک مرحله انجام شوند، این فلگ به طور خودکار توسط Clang به پیونددهنده ارسال می‌شود). این کار امکان اشکال‌زدایی فایل اجرایی و همچنین تولید بسته \fB\&.dSYM\fP را با استفاده از \fBdsymutil(1)\fP فراهم می‌کند. .UNINDENT .UNINDENT .UNINDENT .SS گزینه‌های گرداننده (Driver Options) .INDENT 0.0 .TP .B \-### چاپ (بدون اجرای) دستوراتی که برای این کامپایل باید اجرا شوند. .UNINDENT .INDENT 0.0 .TP .B \-\-help نمایش گزینه‌های موجود. .UNINDENT .INDENT 0.0 .TP .B \-Qunused\-arguments عدم صدور هرگونه هشدار برای آرگومان‌های استفاده‌نشده‌ی گرداننده. .UNINDENT .INDENT 0.0 .TP .B \-Wa, ارسال آرگومان‌های جداشده با کاما در args به اسمبلر. .UNINDENT .INDENT 0.0 .TP .B \-Wl, ارسال آرگومان‌های جداشده با کاما در args به پیونددهنده (linker). .UNINDENT .INDENT 0.0 .TP .B \-Wp, ارسال آرگومان‌های جداشده با کاما در args به پیش‌پردازنده. .UNINDENT .INDENT 0.0 .TP .B \-Xanalyzer ارسال arg به تحلیل‌گر ایستا. .UNINDENT .INDENT 0.0 .TP .B \-Xassembler ارسال arg به اسمبلر. .UNINDENT .INDENT 0.0 .TP .B \-Xlinker ارسال arg به پیونددهنده. .UNINDENT .INDENT 0.0 .TP .B \-Xpreprocessor ارسال arg به پیش‌پردازنده. .UNINDENT .INDENT 0.0 .TP .B \-o نوشتن خروجی در file. .UNINDENT .INDENT 0.0 .TP .B \-print\-file\-name= چاپ مسیر کتابخانه‌ای کامل مربوط به file. .UNINDENT .INDENT 0.0 .TP .B \-print\-libgcc\-file\-name چاپ مسیر کتابخانه‌ای برای کتابخانه زمان اجرای کامپایلر که در حال حاضر استفاده می‌شود (\(dqlibgcc.a\(dq یا \(dqlibclang_rt.builtins.*.a\(dq). .UNINDENT .INDENT 0.0 .TP .B \-print\-prog\-name= چاپ مسیر کامل برنامه name. .UNINDENT .INDENT 0.0 .TP .B \-print\-search\-dirs چاپ مسیرهای استفاده‌شده برای یافتن کتابخانه‌ها و برنامه‌ها. .UNINDENT .INDENT 0.0 .TP .B \-save\-temps ذخیره نتایج میانی کامپایل. .UNINDENT .INDENT 0.0 .TP .B \-save\-stats, \-save\-stats=cwd, \-save\-stats=obj ذخیره آمار داخلی تولید کد (LLVM) در فایلی در دایرکتوری جاری (\fB\-save\-stats\fP/\(dq\-save\-stats=cwd\(dq) یا دایرکتوری فایل خروجی (\(dq\-save\-stats=obj\(dq). .sp همچنین می‌توانید از متغیرهای محیطی برای کنترل گزارش آمار استفاده کنید. تنظیم \fBCC_PRINT_INTERNAL_STAT\fP به \fB1\fP این قابلیت را فعال می‌کند و گزارش در قالب JSON به خروجی استاندارد (stdout) ارسال می‌شود. .sp تنظیم \fBCC_PRINT_INTERNAL_STAT_FILE\fP به مسیر یک فایل، باعث می‌شود آمار در قالب JSON در فایل مشخص‌شده گزارش داده شود. .sp توجه داشته باشید که \fB\-save\-stats\fP بر \fBCC_PRINT_INTERNAL_STAT\fP و \fBCC_PRINT_INTERNAL_STAT_FILE\fP اولویت دارد. .UNINDENT .INDENT 0.0 .TP .B \-integrated\-as, \-no\-integrated\-as به ترتیب برای فعال و غیرفعال کردن استفاده از اسمبلر یکپارچه استفاده می‌شود. این که اسمبلر یکپارچه به طور پیش‌فرض فعال باشد یا خیر، وابسته به معماری مقصد (target) است. .UNINDENT .INDENT 0.0 .TP .B \-time اندازه‌گیری زمان اجرای دستورات به صورت مجزا. .UNINDENT .INDENT 0.0 .TP .B \-ftime\-report چاپ خلاصه‌ای از زمان‌بندی هر مرحله از کامپایل. .UNINDENT .INDENT 0.0 .TP .B \-v نمایش دستورات قابل اجرا و استفاده از خروجی با جزئیات (verbose). .UNINDENT.SS "گزینه‌های تشخیصی (Diagnostics Options)" .INDENT 0.0 .TP .B \-fshow\-column, \-fshow\-source\-location, \-fcaret\-diagnostics, \-fdiagnostics\-fixit\-info, \-fdiagnostics\-parseable\-fixits, \-fdiagnostics\-print\-source\-range\-info, \-fprint\-source\-range\-info, \-fdiagnostics\-show\-option, \-fmessage\-length این گزینه‌ها نحوه چاپ اطلاعات مربوط به پیام‌های تشخیصی (خطاها و هشدارها) را توسط Clang کنترل می‌کنند. لطفاً برای اطلاعات بیشتر به راهنمای کاربر Clang (\%Clang User\(aqs Manual) مراجعه کنید. .UNINDENT .SS "گزینه‌های پیش‌پردازنده (Preprocessor Options)" .INDENT 0.0 .TP .B \-D= یک دستور ضمنی #define را به بافر تعاریف اولیه اضافه می‌کند که پیش از پیش‌پردازش فایل مبدأ خوانده می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-U یک دستور ضمنی #undef را به بافر تعاریف اولیه اضافه می‌کند که پیش از پیش‌پردازش فایل مبدأ خوانده می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-include یک دستور ضمنی #include را به بافر تعاریف اولیه اضافه می‌کند که پیش از پیش‌پردازش فایل مبدأ خوانده می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-I دایرکتوری مشخص‌شده را به مسیر جستجوی فایل‌های include اضافه می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-F دایرکتوری مشخص‌شده را به مسیر جستجوی فایل‌های include فریم‌ورک اضافه می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-nostdinc دایرکتوری‌های استاندارد سیستم یا دایرکتوری‌های توکار کامپایلر را برای فایل‌های include جستجو نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B \-nostdlibinc دایرکتوری‌های استاندارد سیستم را برای فایل‌های include جستجو نمی‌کند، اما دایرکتوری‌های include توکار کامپایلر را جستجو می‌کند. .UNINDENT .INDENT 0.0 .TP .B \-nobuiltininc دایرکتوری توکار clang را برای فایل‌های include جستجو نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B \-nostdinc++ دایرکتوری کتابخانه استاندارد C++ سیستم را برای فایل‌های include جستجو نمی‌کند. .UNINDENT .INDENT 0.0 .TP .B \-fkeep\-system\-includes تنها به همراه \fB\-E\fP قابل استفاده است. محتوای پیش‌پردازش‌شده سرآیندهای \(dqسیستمی\(dq را در خروجی کپی نمی‌کند؛ در عوض، دستور #include را حفظ می‌کند. این امر می‌تواند حجم متن تولیدشده توسط \fB\-E\fP را تا حد زیادی کاهش دهد که هنگام تلاش برای تولید یک نمونه آزمایشی بازتولیدپذیر و \(dqکوچک\(dq می‌تواند مفید باشد. .sp با این حال، این گزینه بازتولیدپذیری را تضمین نمی‌کند. اگر کد مبدأ فراخوانی‌کننده نمادهای پیش‌پردازنده‌ای را تعریف کند که بر رفتار سرآیندهای سیستمی تأثیر می‌گذارند (برای مثال، \fB_XOPEN_SOURCE\fP)، عملکرد \fB\-E\fP آن تعریف را حذف خواهد کرد و بنابراین می‌تواند معناشناسی سرآیند گنجانده‌شده را تغییر دهد. همچنین، استفاده از نسخه متفاوتی از سرآیندهای سیستمی (به‌ویژه نسخه متفاوتی از STL) ممکن است به رفتاری متفاوت منجر شود. همیشه فایل پیش‌پردازش‌شده را با کامپایل جداگانه آن اعتبارسنجی کنید. .UNINDENT .SH "محیط (ENVIRONMENT)" .INDENT 0.0 .TP .B TMPDIR, TEMP, TMP این متغیرهای محیطی، به ترتیب، برای یافتن مکانی جهت نوشتن فایل‌های موقت مورد استفاده در طول فرآیند کامپایل بررسی می‌شوند. .UNINDENT .INDENT 0.0 .TP .B CPATH این متغیر محیطی مسیرهای جستجوی سرآیند اضافی (غیرسیستمی) را مشخص می‌کند که برای یافتن فایل‌های سرآیند include‌شده استفاده می‌شوند. این مسیرها پس از مسیرهای مشخص‌شده با گزینه \fB\-I\fP، اما پیش از هرگونه مسیر جستجوی سرآیند سیستمی بررسی می‌شوند. مسیرها با جداکننده وابسته به پلتفرم، مانند آنچه در متغیر محیطی \fBPATH\fP استفاده می‌شود، تفکیک می‌گردند. ورودی‌های خالی در فهرست مسیرهای تفکیک‌شده، از جمله موارد موجود در ابتدا یا انتهای فهرست، به عنوان دایرکتوری کاری فعلی کامپایلر در نظر گرفته می‌شوند. .UNINDENT .INDENT 0.0 .TP .B C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH این متغیرهای محیطی مسیرهای جستجوی فایل‌های سرآیند سیستمی اضافی را مشخص می‌کنند که هنگام پردازش زبان متناظر استفاده می‌شوند. مسیرهای جستجو مشابه متغیر محیطی \fBCPATH\fP تفکیک می‌شوند. .UNINDENT .INDENT 0.0 .TP .B MACOSX_DEPLOYMENT_TARGET اگر \fB\-mmacos\-version\-min\fP مشخص نشده باشد، هدف استقرار (deployment target) پیش‌فرض از این متغیر محیطی خوانده می‌شود. این گزینه تنها بر اهداف Darwin تأثیر می‌گذارد. .UNINDENT .SH "گزارش باگ‌ها (BUGS)" .sp برای گزارش باگ‌ها، لطفاً از <\%> بازدید کنید. اکثر گزارش‌های باگ باید شامل فایل‌های مبدأ پیش‌پردازش‌شده (با استفاده از گزینه \fB\-E\fP) و خروجی کامل کامپایلر، همراه با اطلاعات لازم برای بازتولید مشکل باشند. .SH "همچنین ببینید (SEE ALSO)" .sp \fBas(1)\fP, \fBld(1)\fP .SH "نویسندگان (AUTHORS)" نگهداری‌شده توسط تیم Clang / LLVM () .SH "کپی‌رایت و تکثیر (COPYRIGHT)" 2007-2026, The Clang Team .\" End of generated man page.