| GFORTRAN(1) | GNU | GFORTRAN(1) |
نام (NAME)
aarch64-linux-gnu-gfortran - کامپایلر فرترن گنو برای معماری AArch64
خلاصه دستور (SYNOPSIS)
gfortran [-c|-S|-E]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...]
[-mmachine-option...]
[-o outfile] infile...
تنها کاربردیترین گزینهها در اینجا فهرست شدهاند؛ برای مشاهده بقیه موارد به ادامه متن رجوع کنید.
توضیحات (DESCRIPTION)
دستور gfortran از تمامی گزینههای پشتیبانیشده توسط دستور gcc پشتیبانی میکند. در این راهنما تنها گزینههای ویژه گنو فرترن مستند شدهاند.
تمامی گزینههای GCC و GNU Fortran هم توسط gfortran و هم توسط gcc (و همچنین هر درایور دیگری که همزمان ساخته شده است، مانند g++) پذیرفته میشوند، چرا که افزودن گنو فرترن به توزیع GCC، امکان پذیرش گزینههای گنو فرترن را برای تمامی درایورهای مربوطه فعال میکند.
در برخی موارد، گزینهها دارای فرم مثبت و منفی هستند؛ فرم منفی -ffoo بهصورت -fno-foo خواهد بود. این راهنما تنها یکی از این دو حالت را (هر کدام که حالت پیشفرض نباشد) مستند میکند.
گزینهها (OPTIONS)
در اینجا خلاصهای از تمام گزینههای مختص به گنو فرترن آورده شده که بر اساس نوع گروهبندی شدهاند. توضیحات مربوطه در بخشهای بعدی آمده است.
- گزینههای زبان فرترن (Fortran Language Options)
- -fall-intrinsics -fallow-argument-mismatch -fallow-invalid-boz -fbackslash -fcray-pointer -fd-lines-as-code -fd-lines-as-comments -fdec -fdec-char-conversions -fdec-structure -fdec-intrinsic-ints -fdec-static -fdec-math -fdec-include -fdec-format-defaults -fdec-blank-format-item -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 -fdefault-real-10 -fdefault-real-16 -fdollar-ok -ffixed-line-length-n -ffixed-line-length-none -fpad-source -ffree-form -ffree-line-length-n -ffree-line-length-none -fimplicit-none -finteger-4-integer-8 -fmax-identifier-length -fmodule-private -ffixed-form -fno-range-check -fopenacc -fopenmp -fopenmp-allocators -fopenmp-simd -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 -freal-8-real-10 -freal-8-real-16 -freal-8-real-4 -std=std -ftest-forall-temp -funsigned
- گزینههای پیشپردازش (Preprocessing Options)
- -A-question[=answer] -Aquestion=answer -C -CC -Dmacro[=defn] -H -P -Umacro -cpp -dD -dI -dM -dN -dU -fworking-directory -imultilib dir -iprefix file -iquote -isysroot dir -isystem dir -nocpp -nostdinc -undef
- گزینههای خطا و هشدار (Error and Warning Options)
- -Waliasing -Wall -Wampersand -Warray-bounds -Wc-binding-type -Wcharacter-truncation -Wconversion -Wno-deprecated-openmp -Wdo-subscript -Wfunction-elimination -Wimplicit-interface -Wimplicit-procedure -Wintrinsic-shadow -Wuse-without-only -Wintrinsics-std -Wline-truncation -Wno-align-commons -Wno-overwrite-recursive -Wno-tabs -Wreal-q-constant -Wsurprising -Wunderflow -Wunused-parameter -Wrealloc-lhs -Wrealloc-lhs-all -Wfrontend-loop-interchange -Wtarget-lifetime -fmax-errors=n -fsyntax-only -pedantic -pedantic-errors
- گزینههای اشکالزدایی (Debugging Options)
- -fbacktrace -fdebug-aux-vars -ffpe-trap=list -ffpe-summary=list
- گزینههای دایرکتوری (Directory Options)
- -Idir -Jdir -fintrinsic-modules-path dir
- گزینههای پیوند (Link Options)
- -static-libgfortran -static-libquadmath
- گزینههای زمان اجرا (Runtime Options)
- -fconvert=conversion -fmax-subrecord-length=length -frecord-marker=length -fsign-zero
- گزینههای همکنشپذیری (Interoperability Options)
- -fc-prototypes -fc-prototypes-external
- گزینههای تولید کد (Code Generation Options)
- -faggressive-function-elimination -fblas-matmul-limit=n -fbounds-check -ftail-call-workaround -ftail-call-workaround=n -fcheck-array-temporaries -fcheck=<all|array-temps|bits|bounds|do|mem|pointer|recursion> -fcoarray=<none|single|lib> -fexternal-blas -fexternal-blas64 -ff2c -ffrontend-loop-interchange -ffrontend-optimize -finit-character=n -finit-integer=n -finit-local-zero -finit-derived -finit-logical=<true|false> -finit-real=<zero|inf|-inf|nan|snan> -finline-intrinsics[=<minloc,maxloc>] -finline-matmul-limit=n -finline-arg-packing -fmax-array-constructor=n -fmax-stack-var-size=n -fno-align-commons -fno-automatic -fno-protect-parens -fno-underscoring -fsecond-underscore -fpack-derived -frealloc-lhs -frecursive -frepack-arrays -fshort-enums -fstack-arrays
- گزینههای توسعهدهندگان (Developer Options)
- -fdump-fortran-global -fdump-fortran-optimized -fdump-fortran-original -fdump-parse-tree -save-temps
گزینههای کنترل لهجه فرترن (Options controlling Fortran dialect)
گزینههای زیر جزئیات لهجه فرترن مورد پذیرش کامپایلر را کنترل میکنند:
- -ffree-form
- -ffixed-form
- قالببندی مورد استفاده توسط پرونده منبع را مشخص میکند. قالببندی فرم آزاد (free form) در فرترن ۹۰ معرفی شد. قالببندی فرم ثابت (fixed form) به طور سنتی در برنامههای قدیمیتر فرترن استفاده میشد. هنگامی که هیچیک از این دو گزینه مشخص نشود، فرم منبع توسط پسوند پرونده تعیین میشود.
- -fall-intrinsics
- این گزینه باعث میشود تمام رویههای ذاتی (شامل افزونههای اختصاصی GNU) پذیرفته شوند. این گزینه میتواند همراه با -std= مفید باشد تا انطباق با استاندارد تحمیل شود اما همچنان به تمام دامنه توابع و رویههای ذاتی موجود در gfortran دسترسی وجود داشته باشد. در نتیجه، گزینه -Wintrinsics-std نادیده گرفته میشود و هیچ رویه تعریفشده توسط کاربر با نام مشابه با هر رویه ذاتی فراخوانی نمیشود، مگر اینکه به صراحت به صورت "EXTERNAL" اعلان شده باشد.
- -fallow-argument-mismatch
- برخی از
کدها شامل
فراخوانیهایی
به
رویههای
خارجی با
عدم تطابق
میان
فراخوانیها
و تعریف
رویه، یا با
عدم تطابق
میان
فراخوانیهای
مختلف
هستند. چنین
کدهایی
ناسازگار
با
استاندارد
هستند و
معمولاً با
یک خطا مشخص
میشوند.
این گزینه
خطا را به
هشداری
تنزل
میدهد که
تنها با
غیرفعال
کردن تمام
هشدارها از
طریق -w
میتوان آن
را غیرفعال
کرد. به
ازای هر
آرگومان
تنها یک
مورد توسط
این هشدار
نشانگذاری
میشود.
گزینه -fallow-argument-mismatch
توسط -std=legacy به
طور ضمنی
فعال
میشود.
استفاده از این گزینه اکیداً نهی میشود. امکانپذیر است که با استفاده از یک رابط صریح و TYPE(*) کدی سازگار با استاندارد ارائه داد که انواع متفاوتی از آرگومانها را مجاز میشمارد.
- -fallow-invalid-boz
- یک ثابت لفظی BOZ میتواند در تعداد محدودی از زمینهها در فرترن سازگار با استاندارد رخ دهد. این گزینه وضعیت خطا را به یک هشدار تنزل میدهد و به یک ثابت لفظی BOZ اجازه میدهد در جاهایی ظاهر شود که استاندارد فرترن در غیر این صورت استفاده از آن را ممنوع میکرد.
- -fd-lines-as-code
- -fd-lines-as-comments
- پردازش ویژهای را برای خطوطی که در منابع فرم ثابت با "d" یا "D" شروع میشوند فعال میکند. اگر گزینه -fd-lines-as-code داده شود، با آنها طوری رفتار میشود که گویی ستون اول حاوی یک فاصله خالی است. اگر گزینه -fd-lines-as-comments داده شود، به عنوان خطوط توضیحات در نظر گرفته میشوند.
- -fdec
- حالت
سازگاری با
DEC.
افزونهها
و سایر
ویژگیهایی
را فعال
میکند که
رفتار
پیشفرض
کامپایلرهای
قدیمیتر
(مانند DEC) را
شبیهسازی
میکنند.
این
ویژگیها
غیراستاندارد
هستند و
باید به هر
قیمتی از
آنها
اجتناب شود.
برای
جزئیات
بیشتر در
مورد
پیادهسازی
این
افزونهها
در GNU Fortran
مستندات
کامل را
ببینید.
سایر فلگهای فعالشده توسط این سوییچ عبارتند از: -fdollar-ok -fcray-pointer -fdec-char-conversions -fdec-structure -fdec-intrinsic-ints -fdec-static -fdec-math -fdec-include -fdec-blank-format-item -fdec-format-defaults
اگر -fd-lines-as-code/-fd-lines-as-comments تنظیم نشده باشند، آنگاه -fdec همچنین -fd-lines-as-comments را تنظیم میکند.
- -fdec-char-conversions
- استفاده از ثابتهای لفظی نویسهای را در انتسابها و دستورهای "DATA" برای متغیرهای غیرنویسهای فعال میکند.
- -fdec-structure
- دستورهای "STRUCTURE" و "RECORD" از DEC و همچنین "UNION"، "MAP" و نقطه ('.') را به عنوان جداکننده عضو (علاوه بر '%') فعال میکند. این ویژگی صرفاً برای سازگاری ارائه شده است؛ در صورت امکان باید به جای آن از انواع مشتقشده فرترن ۹۰ استفاده شود.
- -fdec-intrinsic-ints
- انواع B/I/J/K از توابع عدد صحیح موجود را فعال میکند (مانند "BIAND"، "IIAND"، "JIAND" و غیره). برای فهرست کامل رویههای ذاتی، بخش Intrinsic Procedures را ببینید.
- -fdec-math
- فلگ منسوخشده. هدف از این گزینه فعالسازی رویههای ذاتی ریاضی قدیمی مانند "COTAN" و توابع مثلثاتی بر حسب درجه (مانند "TAND"، "ATAND" و غیره) برای سازگاری با کدهای قدیمیتر بود. این گزینه دیگر قابل استفاده نیست. این توابع مثلثاتی اکنون یا بخشی از فرترن ۲۰۲۳ هستند یا افزونههای GNU محسوب میشوند.
- -fdec-static
- ویژگیهای به سبک DEC یعنی "STATIC" و "AUTOMATIC" را فعال میکند تا نحوه ذخیرهسازی متغیرها و سایر اشیاء را به صراحت مشخص کند.
- -fdec-include
- تجزیه "INCLUDE" را به عنوان یک دستور علاوه بر تجزیه آن به عنوان یک سطر "INCLUDE" فعال میکند. هنگامی که به عنوان دستور "INCLUDE" تجزیه میشود، "INCLUDE" مجبور نیست در یک سطر واحد باشد و میتواند از ادامهدهندههای سطر استفاده کند.
- -fdec-format-defaults
- مشخصکنندههای فرمت F، G و I را فعال میکند تا بدون مشخصکنندههای عرض استفاده شوند؛ در عوض از عرضهای پیشفرض استفاده میشود.
- -fdec-blank-format-item
- یک مورد فرمت خالی را در انتهای مشخصات فرمت فعال میکند؛ یعنی هیچ چیزی بعد از کامای نهایی قرار نگیرد.
- -fdollar-ok
- علامت $ را به عنوان یک نویسه غیرابتدایی معتبر در نام نماد مجاز میشمارد. نمادهایی که با $ آغاز میشوند رد میشوند، زیرا مشخص نیست چه قوانینی باید برای نوعگذاری ضمنی اعمال شوند چرا که سازندگان مختلف قوانین متفاوتی را پیادهسازی کردهاند. استفاده از $ در دستورهای "IMPLICIT" نیز رد میشود.
- -fbackslash
- تفسیر بکاسلشها را در ثابتهای لفظی رشتهای از یک نویسه بکاسلش تکی به نویسههای گریز «به سبک C» تغییر میدهد. ترکیبهای زیر بسط داده میشوند: \a، \b، \f، \n، \r، \t، \v، \\ و \0 به ترتیب به نویسههای اسکی alert، backspace، form feed، newline، carriage return، horizontal tab، vertical tab، backslash و NUL. علاوه بر این، \xnn، \unnnn و \Unnnnnnnn (که در آن هر n یک رقم هگزادسیمال است) به نویسههای یونیکد متناظر با نقاط کد مشخصشده تبدیل میشوند. تمام ترکیبهای دیگر یک نویسه که قبل از آن \ آمده باشد بدون تغییر باقی میمانند.
- -fmodule-private
- سطح دسترسی پیشفرض موجودیتهای ماژول را روی "PRIVATE" قرار میدهد. موجودیتهای مرتبط از طریق Use در دسترس نیستند مگر اینکه به صراحت به عنوان "PUBLIC" اعلان شده باشند.
- -ffixed-line-length-n
- ستونی را
مشخص
میکند که
پس از آن،
نویسهها
در خطوط
معمولی با
فرمت ثابت
در پرونده
منبع
نادیده
گرفته
میشوند، و
مگر اینکه
"-fno-pad-source"
مشخص شده
باشد، پس از
پایان خطوط
کوتاه با
فرمت ثابت،
فاصلههای
خالی تا
رسیدن به آن
ستون فرض
میشوند
(گویی تا آن
طول پر شده
است).
مقدارهای پرکاربرد برای n شامل ۷۲ (استاندارد و پیشفرض)، ۸۰ (تصویر کارت پانچ) و ۱۳۲ (متناظر با گزینههای «extended-source» در برخی کامپایلرهای رایج) است. همچنین n میتواند none باشد، به این معنی که کل خط معنادار است و به ثابتهای نویسهای ادامهیافته هرگز فاصلههای خالی ضمنی برای پر کردن خط افزوده نمیشود. گزینه -ffixed-line-length-0 همان معنای -ffixed-line-length-none را دارد.
- -fno-pad-source
- به طور پیشفرض در خطوط با فرمت ثابت، پس از پایان خطوط کوتاه فاصلههای خالی فرض میشوند (گویی تا آن طول پر شده است). در صورتی که یکی از گزینههای -ffixed-line-length-0، -ffixed-line-length-none یا -fno-pad-source استفاده شود، این کار انجام نمیشود. با هر یک از این گزینهها، به ثابتهای نویسهای ادامهیافته هرگز فاصلههای خالی ضمنی برای پر کردن خط اضافه نمیشود.
- -ffree-line-length-n
- ستونی را مشخص میکند که پس از آن نویسهها در خطوط معمولی با فرمت آزاد در پرونده منبع نادیده گرفته میشوند. مقدار پیشفرض ۱۳۲ است. همچنین n میتواند none باشد، به این معنی که کل خط معنادار است. گزینه -ffree-line-length-0 معنای یکسانی با -ffree-line-length-none دارد.
- -fmax-identifier-length=n
- حداکثر طول مجاز شناسه را مشخص میکند. مقادیر معمول ۳۱ (فرترن ۹۵) و ۶۳ (فرترن ۲۰۰۳ و بعد از آن) هستند.
- -fimplicit-none
- مشخص میکند که هیچ نوعگذاری ضمنی مجاز نیست، مگر اینکه توسط دستورهای صریح "IMPLICIT" لغو شود. این معادل افزودن "implicit none" به ابتدای هر رویه است.
- -fcray-pointer
- افزونه اشارهگر Cray را فعال میکند که قابلیتی شبیه به اشارهگر در زبان C را فراهم میسازد.
- -fopenacc
- پردازش رهنمودهای OpenACC شامل !$acc در فرترن با فرمت آزاد، و !$acc، c$acc و *$acc در فرترن با فرمت ثابت را فعال میکند. هنگامی که -fopenacc مشخص شود، کامپایلر کد شتابیافته را بر اساس رابط برنامهنویسی کاربردی OpenACC نسخه 2.6 https://www.openacc.org تولید میکند. این گزینه مستلزم -pthread است و بنابراین تنها روی مقصدهایی پشتیبانی میشود که از -pthread پشتیبانی میکنند. گزینه -fopenacc به طور ضمنی شامل -frecursive نیز میشود.
- -fopenmp
- پردازش رهنمودهای OpenMP شامل !$omp را در فرترن فعال میکند. علاوه بر این، نشانگر کامپایل شرطی !$ را در فرترن فعال میسازد. در فرترن با فرمت منبع ثابت، نشانگرها همچنین میتوانند با c یا * آغاز شوند. هنگامی که -fopenmp مشخص شود، کامپایلر کد موازی را طبق رابط برنامهنویسی کاربردی OpenMP نسخه 4.5 https://www.openmp.org تولید میکند. این گزینه مستلزم -pthread است و بنابراین تنها روی مقصدهایی پشتیبانی میشود که از -pthread پشتیبانی میکنند. گزینه -fopenmp به طور ضمنی شامل -fopenmp-simd و -frecursive نیز میشود.
- -fopenmp-allocators
- پردازش تخصیص، تخصیص مجدد و آزادسازی متغیرهای قابلتخصیص (allocatable) و اشارهگر فرترن را که با استفاده از سازههای !$omp allocators و !$omp allocate تخصیص یافتهاند، فعال میکند. پروندههای حاوی هر یک از این دو رهنمود باید علاوه بر -fopenmp با این گزینه نیز کامپایل شوند. علاوه بر این، تمام پروندههایی که ممکن است متغیری را که با یک تخصیصدهنده OpenMP تخصیص یافته است آزاد کرده یا مجدداً تخصیص دهند، باید با این گزینه کامپایل شوند. این شامل انتساب ذاتی به متغیرهای قابلتخصیص در صورت احتمال وقوع تخصیص مجدد و آزادسازی ناشی از مواردی مانند: پایان حوزه (scope)، آزادسازی صریح، intent(out)، آزادسازی مؤلفههای قابلتخصیص و غیره است. پروندههایی که وضعیت تخصیص را تغییر نمیدهند یا فقط برای مؤلفههای یک نوع مشتقشده هستند که با استفاده از آن دو رهنمود تخصیص نیافتهاند، نیازی به کامپایل شدن با این گزینه ندارند؛ همچنین پروندههایی که چنین متغیرهایی را پس از آزادسازی یا پس از تخصیص توسط تخصیصدهنده عادی فرترن مدیریت میکنند، نیازی به این گزینه ندارند.
- -fopenmp-simd
- پردازش رهنمودهای OpenMP شامل "simd"، "declare simd"، "declare reduction"، "assume"، "ordered"، "scan" و "loop"، و رهنمودهای ترکیبی که "simd" را به عنوان جزء تشکیلدهنده به همراه "!$omp" در فرترن دارند فعال میکند. علاوه بر این، نشانگر کامپایل شرطی !$ را در فرترن فعال میسازد. در فرترن با فرمت منبع ثابت، نشانگرها میتوانند با c یا * نیز شروع شوند. سایر رهنمودهای OpenMP نادیده گرفته میشوند. مگر اینکه -fopenmp نیز مشخص شده باشد، ناحیه "loop" صرفنظر از بند "bind" مشخصشده، به ناحیه وظیفه جاری مقید میشود.
- -fno-range-check
- بررسی محدوده روی نتایج سادهسازی عبارات ثابت در زمان کامپایل را غیرفعال میکند. به عنوان مثال، GNU Fortran هنگام سادهسازی "a = 1. / 0" در زمان کامپایل خطا میدهد. با این گزینه خطایی داده نمیشود و به "a" مقدار "+Infinity" اختصاص مییابد. اگر یک عبارت به مقداری خارج از محدوده مربوطه ["-HUGE()":HUGE()] ارزیابی شود، آنگاه عبارت بر حسب مورد با "-Inf" یا "+Inf" جایگزین میشود. به همین ترتیب، "DATA i/Z'FFFFFFFF'/" در بیشتر سیستمها منجر به سرریز عدد صحیح میشود، اما با -fno-range-check مقدار «دور میزند» و در عوض "i" با -1 مقداردهی اولیه میشود.
- -fdefault-integer-8
- انواع پیشفرض صحیح و منطقی را روی یک نوع با عرض ۸ بایت تنظیم میکند. این گزینه بر نوع (kind) ثابتهای عدد صحیح مانند 42 نیز تأثیر میگذارد. بر خلاف -finteger-4-integer-8، این گزینه متغیرهای دارای اعلان صریح kind را ارتقا نمیدهد.
- -fdefault-real-8
- نوع پیشفرض اعشاری (real) را روی یک نوع با عرض ۸ بایت تنظیم میکند. این گزینه همچنین بر نوع ثابتهای اعشاری غیرمضاعف مانند 1.0 تأثیر میگذارد. این گزینه عرض پیشفرض "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف مانند "1.d0" را در صورت امکان به ۱۶ بایت ارتقا میدهد. اگر "-fdefault-double-8" همراه با "fdefault-real-8" داده شود، "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف ارتقا نمییابند. بر خلاف -freal-4-real-8، گزینه "fdefault-real-8" متغیرهایی را که دارای اعلان صریح kind هستند ارتقا نمیدهد.
- -fdefault-real-10
- نوع پیشفرض اعشاری را روی یک نوع با عرض ۱۰ بایت تنظیم میکند. این گزینه همچنین بر نوع ثابتهای اعشاری غیرمضاعف مانند 1.0 تأثیر میگذارد. این گزینه عرض پیشفرض "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف مانند "1.d0" را در صورت امکان به ۱۶ بایت ارتقا میدهد. اگر "-fdefault-double-8" همراه با "fdefault-real-10" داده شود، "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف ارتقا نمییابند. بر خلاف -freal-4-real-10، گزینه "fdefault-real-10" متغیرهایی را که دارای اعلان صریح kind هستند ارتقا نمیدهد.
- -fdefault-real-16
- نوع پیشفرض اعشاری را روی یک نوع با عرض ۱۶ بایت تنظیم میکند. این گزینه همچنین بر نوع ثابتهای اعشاری غیرمضاعف مانند 1.0 تأثیر میگذارد. این گزینه عرض پیشفرض "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف مانند "1.d0" را در صورت امکان به ۱۶ بایت ارتقا میدهد. اگر "-fdefault-double-8" همراه با "fdefault-real-16" داده شود، "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف ارتقا نمییابند. بر خلاف -freal-4-real-16، گزینه "fdefault-real-16" متغیرهایی را که دارای اعلان صریح kind هستند ارتقا نمیدهد.
- -fdefault-double-8
- نوع "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف مانند "1.d0" را روی یک نوع با عرض ۸ بایت تنظیم میکند. اگر این مقدار قبلاً پیشفرض بوده باشد، کاری انجام نمیدهد. این گزینه از ارتقای "DOUBLE PRECISION" و ثابتهای اعشاری مضاعف مانند "1.d0" به ۱۶ بایت توسط گزینههای -fdefault-real-8، -fdefault-real-10 و -fdefault-real-16 جلوگیری میکند.
- -finteger-4-integer-8
- تمام موجودیتهای INTEGER(KIND=4) را به موجودیتهای INTEGER(KIND=8) ارتقا میدهد. اگر "KIND=8" در دسترس نباشد، یک خطا صادر میشود. این گزینه باید با احتیاط استفاده شود و ممکن است برای کدهای شما مناسب نباشد. حوزههای نگرانی احتمالی عبارتند از فراخوانی به رویههای خارجی، تراز در "EQUIVALENCE" و/یا "COMMON"، رابطهای جنریک، تبدیل ثابت لفظی BOZ، و ورودی/خروجی. بررسی نمایش میانی کد ترجمهشده فرترن، که توسط -fdump-tree-original تولید میشود، پیشنهاد میگردد.
- -freal-4-real-8
- -freal-4-real-10
- -freal-4-real-16
- -freal-8-real-4
- -freal-8-real-10
- -freal-8-real-16
- تمام
موجودیتهای
REAL(KIND=M) را به
موجودیتهای
REAL(KIND=N)
ارتقا
میدهد. اگر
REAL(KIND=N) در
دسترس
نباشد، یک
خطا صادر
میشود.
فلگهای
"-freal-4-" بر
نوع اعشاری
پیشفرض
نیز تأثیر
میگذارند
و فلگهای
"-freal-8-" نیز
بر نوع
اعشاری با
دقت مضاعف
اثر
میگذارند.
تمام انواع
دیگر
اعشاری تحت
تأثیر این
گزینه قرار
نمیگیرند.
این ارتقا
همچنین بر
ثابتهای
لفظی
اعشاری از
نوع
پیشفرض و
با دقت
مضاعف و به
ترتیب
شماره نوع
مشخصشده ۴
یا ۸ اعمال
میشود. با
این حال،
"-fdefault-real-8"،
"-fdefault-real-10"،
"-fdefault-real-10" و
"-fdefault-double-8"
برای انواع
اعشاری
پیشفرض و
با دقت
مضاعف، هم
برای
ثابتهای
لفظی
اعشاری و هم
برای
اعلانهای
بدون شماره
kind، تقدم
دارند. توجه
داشته
باشید که
برای
"REAL(KIND=KIND(1.0))"
مقدار لفظی
ممکن است
ارتقا یابد
و سپس نتیجه
ممکن است
دوباره
ارتقا پیدا
کند. این
گزینهها
باید با
احتیاط
استفاده
شوند و ممکن
است برای
کدهای شما
مناسب
نباشند.
حوزههای
نگرانی
احتمالی
شامل
فراخوانی
به
رویههای
خارجی،
تراز در
"EQUIVALENCE" و/یا
"COMMON"،
رابطهای
جنریک،
تبدیل ثابت
لفظی BOZ، و
ورودی/خروجی
و فراخوانی
به
رویههای
ذاتی هنگام
ارسال
مقدار به
آرگومان
ساختگی
"kind=" است.
بررسی
نمایش
میانی کد
ترجمهشده
فرترن،
تولیدشده
توسط -fdump-fortran-original
یا -fdump-tree-original،
پیشنهاد
میشود.
توجه: این گزینهها با ورودی/خروجی نوع مشتقشده تعریفشده توسط کاربر (DTIO) ناسازگار هستند.
- -std=std
- استانداردی را مشخص میکند که برنامه باید با آن مطابقت داشته باشد، که میتواند یکی از مقادیر f95، f2003، f2008، f2018، f2023، gnu یا legacy باشد. مقدار پیشفرض برای std برابر gnu است که یک ابرمجموعه از آخرین استاندارد فرترن را مشخص میکند که شامل تمام افزونههای پشتیبانیشده توسط GNU Fortran است، هرچند برای افزونههای منسوخشدهای که استفاده از آنها در کدهای جدید توصیه نمیشود، هشدار داده میشود. مقدار legacy معادل است اما بدون هشدارهای مربوط به افزونههای منسوخشده، و ممکن است برای برنامههای غیراستاندارد قدیمی مفید باشد. مقادیر f95، f2003، f2008، f2018 و f2023 به ترتیب انطباق دقیق با استانداردهای فرترن ۹۵، فرترن ۲۰۰۳، فرترن ۲۰۰۸، فرترن ۲۰۱۸ و فرترن ۲۰۲۳ را مشخص میکنند؛ برای تمام افزونههای فراتر از استاندارد زبان مربوطه خطا داده میشود و برای ویژگیهای فرترن ۷۷ که در استانداردهای بعدی مجاز اما رو به زوال هستند، هشدار صادر میشود. گزینه منسوخشده -std=f2008ts به عنوان یک نام مستعار برای -std=f2018 عمل میکند. این گزینه صرفاً برای سازگاری عقبرو با نسخههای قبلی gfortran وجود دارد و نباید دیگر استفاده شود. گزینه -std=f202y به عنوان یک نام مستعار برای -std=f2023 عمل کرده و ویژگیهای پیشنهادی را برای آزمایش فرترن 202y فعال میکند. با توسعه استاندارد فرترن 202y، ممکن است پیادهسازی تغییر کند یا ویژگیهای آزمایشی جدید حذف شوند.
- -ftest-forall-temp
- پوشش آزمون را با وادار کردن بیشتر انتسابهای forall به استفاده از متغیر موقت افزایش میدهد.
- -funsigned
- افزونه آزمایشی بدون علامت (unsigned) را مجاز میسازد.
فعالسازی و سفارشیسازی پیشپردازش (Enable and customize preprocessing)
بسیاری از کامپایلرهای فرترن، از جمله فرترن گنو (GNU Fortran)، امکان عبور دادن کد منبع از یک پیشپردازنده C (کوتاهنوشت CPP؛ گاهی نیز پیشپردازنده فرترن یا FPP نامیده میشود) را جهت فراهمسازی امکان کامپایل شرطی میدهند. در مورد فرترن گنو، این همان پیشپردازنده C گنو در حالت سنتی (traditional mode) است. در سیستمهایی با نامهای پرونده نگهدارنده بزرگی و کوچکی حروف (case-preserving)، پیشپردازنده در صورتی که پسوند نام فایل .F، .FOR، .FTN، .fpp، .FPP، .F90، .F95، .F03 یا .F08 باشد، به صورت خودکار فراخوانی میشود. برای فراخوانی دستی پیشپردازنده روی هر فایلی، از -cpp استفاده کنید؛ برای غیرفعال کردن پیشپردازش روی فایلهایی که پیشپردازنده به طور خودکار اجرا میشود، از -nocpp استفاده نمایید.
هنگام کامپایل یک پرونده پیشپردازششده، از -fpreprocessed استفاده کنید. این گزینه پیشپردازنده C را نادیده میگیرد.
اگر یک فایل پیشپردازششده شامل پرونده دیگری با دستور فرترن "INCLUDE" باشد، فایل گنجاندهشده پیشپردازش نمیشود. برای پیشپردازش فایلهای گنجاندهشده، از دستور معادل پیشپردازنده "#include" استفاده کنید.
اگر فرترن گنو پیشپردازنده را فراخوانی کند، "__GFORTRAN__" تعریف میشود. ماکروهای "__GNUC__"، "__GNUC_MINOR__" و "__GNUC_PATCHLEVEL__" میتوانند برای تشخیص نسخه کامپایلر استفاده شوند. برای جزئیات بیشتر به Top,,Overview,cpp,The C Preprocessor مراجعه کنید.
فرترن گنو علاوه بر نوعهای گونه (kind types) مورد نیاز استاندارد فرترن، از تعدادی نوع گونه "INTEGER" و "REAL" نیز پشتیبانی میکند. در دسترس بودن هر نوع گونه معین وابسته به معماری سیستم است. ماکروهای پیشپردازنده پیشفرض زیر میتوانند برای گنجاندن شرطی کدهای مربوط به این نوعهای گونه اضافی به کار روند: "__GFC_INT_1__"، "__GFC_INT_2__"، "__GFC_INT_8__"، "__GFC_INT_16__"، "__GFC_REAL_10__" و "__GFC_REAL_16__".
در حالی که CPP استاندارد عملی (de facto) برای پیشپردازش کدهای فرترن است، بخش ۳ استاندارد فرترن ۹۵ (ISO/IEC 1539-3:1998) کامپایل شرطی را تعریف میکند، که چندان مورد استفاده گسترده نیست و مستقیماً توسط کامپایلر فرترن گنو پشتیبانی نمیشود.
گزینههای زیر پیشپردازش کدهای فرترن را کنترل میکنند:
- -cpp
- -nocpp
- فعالسازی
پیشپردازش.
اگر پسوند
فایل .fpp، .FPP،
.F، .FOR، .FTN،
.F90، .F95، .F03 یا
.F08 باشد،
پیشپردازنده
به صورت
خودکار
فراخوانی
میشود. از
این گزینه
برای
فعالسازی
دستی
پیشپردازش
انواع
فایلهای
فرترن
استفاده
کنید.
برای غیرفعال کردن پیشپردازش فایلهایی با هر یک از پسوندهای فهرستشده در بالا، از حالت نفی آن استفاده کنید: -nocpp.
پیشپردازنده در حالت سنتی (traditional mode) اجرا میشود. تمامی محدودیتهای قالب فایل، به ویژه محدودیتهای طول خط، بر خروجی پیشپردازششده نیز اعمال میشوند؛ بنابراین شاید مناسب باشد که از گزینههای -ffree-line-length-none یا -ffixed-line-length-none استفاده کنید.
- -dM
- به جای
خروجی
عادی،
فهرستی از
دستورات
هدایتکننده
'#define' را
برای تمام
ماکروهای
تعریفشده
در حین
اجرای
پیشپردازنده،
شامل
ماکروهای
از پیش
تعریفشده،
تولید
میکند. این
امکان به
شما راهی
برای پی
بردن به این
که چه
مواردی در
نسخه
پیشپردازنده
شما از پیش
تعریف
شدهاند
میدهد. با
فرض اینکه
پروندهای
به نام foo.f90
ندارید،
دستور
touch foo.f90; gfortran -cpp -E -dM foo.f90
تمامی ماکروهای از پیش تعریفشده را نمایش میدهد.
- -dD
- مانند -dM است، جز در دو مورد: شامل ماکروهای از پیش تعریفشده نمیشود، و هم دستورات هدایتکننده "#define" و هم نتیجه پیشپردازش را در خروجی درج میکند. هر دو نوع خروجی به پرونده خروجی استاندارد (stdout) ارسال میشوند.
- -dN
- مانند -dD، اما فقط نام ماکروها را درج میکند، نه بسط (تعریف) آنها را.
- -dU
- مانند -dD است، با این تفاوت که تنها ماکروهایی که بسط داده میشوند یا وضعیت تعریفشدن آنها در دستورات پیشپردازنده آزمایش میشود، در خروجی میآیند؛ خروجی تا زمان استفاده یا آزمایش ماکرو به تاخیر میافتد؛ و همچنین دستورات '#undef' برای ماکروهایی که آزمایش شدهاند اما در آن زمان تعریف نشده بودند، در خروجی درج میشوند.
- -dI
- دستورات هدایتکننده '#include' را علاوه بر نتیجه پیشپردازش در خروجی درج میکند.
- -fworking-directory
- تولید نشانگرهای خط (linemarkers) را در خروجی پیشپردازنده فعال میکند تا کامپایلر از دایرکتوری کاری جاری در زمان پیشپردازش مطلع شود. هنگامی که این گزینه فعال باشد، پیشپردازنده پس از نشانگر خط اولیه، یک نشانگر خط دوم همراه با پوشه کاری جاری به دنبال دو اسلش درج میکند. در صورت وجود این پوشه در ورودی پیشپردازششده، GCC آن را به عنوان پوشه کاری جاری در برخی از قالبهای اطلاعات اشکالزدایی درج میکند. این گزینه در صورت فعال بودن اطلاعات اشکالزدایی به طور ضمنی فعال است، اما میتوان با شکل منفی آن یعنی -fno-working-directory از آن جلوگیری کرد. اگر فلگ -P در خط فرمان وجود داشته باشد، این گزینه هیچ تاثیری نخواهد داشت، زیرا اصلاً هیچ دستور هدایتکننده "#line" تولید نمیشود.
- -idirafter dir
- دایرکتوری dir را برای فایلهای include جستجو میکند، اما این کار پس از بررسی تمامی دایرکتوریهای مشخصشده با -I و دایرکتوریهای استاندارد سیستم انجام میشود. با dir مانند یک پوشه include سیستمی رفتار میشود. اگر dir با "=" شروع شود، آنگاه "=" با پیشوند sysroot جایگزین میشود؛ به --sysroot و -isysroot مراجعه کنید.
- -imultilib dir
- از dir به عنوان یک زیرپوشه از دایرکتوری حاوی سرآیندهای C++ مختص به معماری هدف استفاده میکند.
- -iprefix prefix
- مقدار prefix را به عنوان پیشوند برای گزینههای بعدی -iwithprefix مشخص میکند. اگر prefix نشاندهنده یک دایرکتوری باشد، باید اسلش پایانی '/' را بگنجانید.
- -isysroot dir
- این گزینه شبیه به گزینه --sysroot است، اما تنها بر پروندههای سرآیند اعمال میشود. برای اطلاعات بیشتر به گزینه --sysroot مراجعه کنید.
- -iquote dir
- پوشه dir را فقط برای فایلهای سرآیندی که با "#include "file"" درخواست شدهاند، پیش از تمام دایرکتوریهای مشخصشده با -I و پیش از دایرکتوریهای استاندارد سیستم جستجو میکند؛ این پوشه برای "#include <file>" جستجو نمیشود. اگر dir با "=" شروع شود، آنگاه علامت "=" با پیشوند sysroot جایگزین میشود؛ به --sysroot و -isysroot مراجعه کنید.
- -isystem dir
- دایرکتوری dir را برای فایلهای سرآیند، پس از تمامی دایرکتوریهای مشخصشده با -I اما قبل از دایرکتوریهای استاندارد سیستم جستجو میکند. آن را به عنوان یک دایرکتوری سیستمی علامتگذاری میکند تا همان رفتار ویژهای که برای دایرکتوریهای استاندارد سیستم اعمال میشود برای آن نیز اعمال گردد. اگر dir با "=" آغاز شود، "=" با پیشوند sysroot جایگزین میشود؛ به --sysroot و -isysroot مراجعه کنید.
- -nostdinc
- دایرکتوریهای استاندارد سیستم را برای فایلهای سرآیند جستجو نمیکند. تنها دایرکتوریهایی که با گزینههای -I مشخص کردهاید (و در صورت مناسب بودن، پوشه فایل جاری) جستجو میشوند.
- -undef
- هیچیک از ماکروهای ویژه سیستم یا ویژه GCC را از پیش تعریف نمیکند. ماکروهای استاندارد از پیش تعریفشده همچنان تعریفشده باقی میمانند.
- -Apredicate=answer
- یک ادعا (assertion) با گزاره predicate و پاسخ answer ایجاد میکند. این قالب نسبت به قالب قدیمیتر -A predicate(answer) که هنوز هم پشتیبانی میشود ترجیح داده میشود، زیرا از کاراکترهای ویژه شل استفاده نمیکند.
- -A-predicate=answer
- یک ادعا با گزاره predicate و پاسخ answer را لغو میکند.
- -C
- توضیحات
(کامنتها)
را دور
نیندازید.
تمام
کامنتها
به فایل
خروجی
فرستاده
میشوند،
به جز
کامنتهای
موجود در
دستورات
پردازششده،
که به همراه
خود دستور
حذف
میشوند.
هنگام استفاده از -C باید برای اثرات جانبی آماده باشید؛ این گزینه باعث میشود پیشپردازنده با کامنتها به عنوان توکنهای مستقل رفتار کند. به عنوان مثال، کامنتهایی که در ابتدای یک خط دستور هدایتکننده ظاهر میشوند، این اثر را دارند که آن خط را به یک خط کد منبع معمولی تبدیل کنند، زیرا اولین توکن روی خط دیگر '#' نیست.
هشدار: این گزینه در حال حاضر فقط کامنتهای به سبک C را مدیریت میکند. پیشپردازنده هنوز کامنتهای به سبک فرترن را شناسایی نمیکند.
- -CC
- توضیحات را
دور
نیندازید،
از جمله در
حین بسط
ماکرو. این
گزینه شبیه
-C است، به
جز اینکه
کامنتهای
درون
ماکروها
نیز به فایل
خروجی که
ماکرو در آن
بسط
مییابد
منتقل
میشوند.
علاوه بر اثرات جانبی گزینه -C، گزینه -CC باعث میشود تمامی کامنتهای به سبک C++ درون یک ماکرو به کامنتهای به سبک C تبدیل شوند. این کار برای جلوگیری از آن است که استفاده بعدی از آن ماکرو به طور ناخواسته ادامه خط منبع را کامنت نکند. گزینه -CC به طور کلی برای پشتیبانی از کامنتهای ابزارهای lint استفاده میشود.
هشدار: این گزینه در حال حاضر فقط کامنتهای به سبک C و C++ را مدیریت میکند. پیشپردازنده هنوز کامنتهای به سبک فرترن را شناسایی نمیکند.
- -Dname
- نام name را به عنوان یک ماکرو با مقدار تعریف 1 از پیش تعریف میکند.
- -Dname=definition
- محتوای definition
توکنبندی
شده و طوری
پردازش
میشود که
گویی در فاز
سوم ترجمه
در یک دستور
هدایتکننده
'#define' ظاهر
شده است. به
ویژه،
تعریف توسط
کاراکترهای
خط جدید
تعبیهشده
بریده
میشود.
اگر پیشپردازنده را از یک شل یا برنامهای شبیه شل فراخوانی میکنید، ممکن است لازم باشد از نحو نقلقول شل برای محافظت از کاراکترهایی مانند فاصلهها که در نحو شل دارای معنا هستند استفاده کنید.
اگر میخواهید یک ماکروی شبهتابع را در خط فرمان تعریف کنید، فهرست آرگومانهای آن را در پرانتز قبل از علامت مساوی (در صورت وجود) بنویسید. پرانتزها برای اکثر شلها معنادار هستند، بنابراین باید گزینه را نقلقول کنید. در sh و csh، دستور "-D'name(args...)=definition'" کار میکند.
گزینههای -D و -U به ترتیبی که در خط فرمان داده شدهاند پردازش میشوند. تمامی گزینههای -imacros file و -include file پس از تمامی گزینههای -D و -U پردازش میشوند.
- -H
- علاوه بر سایر فعالیتهای عادی، نام هر فایل سرآیند استفادهشده را چاپ میکند. هر نام دندانهدار میشود تا عمق قرارگیری آن در پشته '#include' مشخص شود.
- -P
- از تولید نشانگرهای خط در خروجی پیشپردازنده جلوگیری میکند. این کار ممکن است هنگام اجرای پیشپردازنده روی کدی که کد C نیست و به برنامهای ارسال میشود که شاید به خاطر نشانگرهای خط سردرگم شود، مفید باشد.
- -Uname
- هرگونه تعریف قبلی از name، خواه توکار باشد یا با گزینه -D ارائه شده باشد، را لغو میکند.
گزینههای درخواست یا مهار خطاها و هشدارها (Options to request or suppress errors and warnings)
خطاها پیامهای تشخیصی هستند که گزارش میدهند کامپایلر GNU Fortran نمیتواند بخش مربوطه از کد منبع را کامپایل کند. کامپایلر به پردازش برنامه به منظور گزارش خطاهای بیشتر جهت کمک به اشکالزدایی ادامه میدهد، اما هیچ خروجی کامپایلشدهای تولید نمیکند.
هشدارها پیامهای تشخیصی هستند که ساختارهایی را گزارش میدهند که ذاتاً اشتباه نیستند اما مخاطرهآمیز بوده یا نشاندهنده احتمال وجود یک باگ در برنامه هستند. مگر اینکه -Werror مشخص شده باشد، آنها مانع کامپایل برنامه نمیشوند.
شما میتوانید هشدارهای خاص متعددی را با گزینههایی که با -W شروع میشوند درخواست کنید، برای نمونه -Wimplicit برای درخواست هشدار درباره اعلانات ضمنی. هر یک از این گزینههای هشدار خاص همچنین دارای یک فرم منفی هستند که با -Wno- شروع میشود تا هشدارها را خاموش کند؛ برای مثال، -Wno-implicit. این راهنما تنها یکی از دو فرم را فهرست میکند، هر کدام که پیشفرض نباشد.
این گزینهها مقدار و انواع خطاها و هشدارهای تولیدشده توسط GNU Fortran را کنترل میکنند:
- -fmax-errors=n
- حداکثر تعداد پیامهای خطا را به n محدود میکند، که در آن نقطه GNU Fortran به جای تلاش برای ادامه پردازش کد منبع متوقف میشود. اگر n برابر 0 باشد، هیچ محدودیتی روی تعداد پیامهای خطای تولیدشده وجود ندارد.
- -fsyntax-only
- کد را برای خطاهای نحوی بررسی میکند، اما عملاً آن را کامپایل نمیکند. این گزینه فایلهای ماژول را برای هر ماژول موجود در کد تولید میکند، اما هیچ فایل خروجی دیگری تولید نمیکند.
- -Wpedantic
- -pedantic
- هشدارهایی
را برای
استفاده از
افزونههای
فراتر از
استاندارد
فرترن صادر
میکند. -pedantic
همچنین
برای
ساختارهای
زبان C در
جایی که در
فایلهای
منبع GNU Fortran رخ
میدهند
اعمال
میشود،
مانند
استفاده از
\e در یک
ثابت
کاراکتری
درون
هدایتکنندهای
مانند
"#include".
برنامههای معتبر فرترن باید با این گزینه یا بدون آن به درستی کامپایل شوند. با این حال، بدون این گزینه، افزونههای خاص گنو و ویژگیهای سنتی فرترن نیز پشتیبانی میشوند. با این گزینه، بسیاری از آنها رد میشوند.
برخی از کاربران تلاش میکنند از -pedantic برای بررسی انطباق برنامهها با استاندارد استفاده کنند. آنها به زودی درمییابند که این گزینه دقیقاً آنچه را که میخواهند انجام نمیدهد---برخی از رویههای غیر استاندارد را پیدا میکند، اما نه همه را. با این حال، از بهبودهای گنو فرترن در این زمینه استقبال میشود.
این گزینه باید همراه با -std=f95، -std=f2003، -std=f2008، -std=f2018 یا -std=f2023 استفاده شود.
- -pedantic-errors
- مشابه -pedantic، با این تفاوت که به جای هشدار، خطا تولید میشود.
- -Wall
- گزینههای هشدار متداولی را فعال میکند که مربوط به کاربردهایی هستند که ما اجتناب از آنها را توصیه میکنیم و معتقدیم که اجتناب از آنها آسان است. این مورد در حال حاضر شامل -Waliasing، -Wampersand، -Wconversion، -Wsurprising، -Wc-binding-type، -Wintrinsics-std، -Wtabs، -Wintrinsic-shadow، -Wline-truncation، -Wtarget-lifetime، -Winteger-division، -Wreal-q-constant، -Wunused و -Wundefined-do-loop میشود.
- -Waliasing
- درباره نام
مستعار
احتمالی (aliasing)
آرگومانهای
صوری هشدار
میدهد. به
طور خاص،
اگر همان
آرگومان
واقعی در یک
فراخوانی
با یک رابط
صریح با یک
آرگومان
صوری دارای
INTENT(IN) و یک
آرگومان
صوری دارای
INTENT(OUT)
مرتبط شود،
هشدار
میدهد.
مثال زیر باعث ایجاد این هشدار میشود.
interface subroutine bar(a,b) integer, intent(in) :: a integer, intent(out) :: b end subroutine end interface integer :: a call bar(a,a) - -Wampersand
- درباره نبود کاراکتر امپرسند (&) در ثابتهای کاراکتری ادامهیافته هشدار میدهد. این هشدار با -Wampersand، -pedantic، -std=f95، -std=f2003، -std=f2008، -std=f2018 و -std=f2023 داده میشود. توجه: در صورت عدم وجود امپرسند در یک ثابت کاراکتری ادامهیافته، GNU Fortran فرض میکند که ادامه در اولین کاراکتر غیرتوضیحی و غیرفاصلهای پس از امپرسندی که ادامه را آغاز کرده است، رخ میدهد.
- -Warray-temporaries
- درباره آرایههای موقتی ایجادشده توسط کامپایلر هشدار میدهد. اطلاعات تولیدشده توسط این هشدار گاهی اوقات در بهینهسازی، به منظور اجتناب از چنین آرایههای موقتی، مفید است.
- -Wc-binding-type
- اگر یک متغیر ممکن است با C سازگار و بینعملیاتی نباشد هشدار میدهد. به ویژه، اگر متغیر با استفاده از یک نوع ذاتی با گونه (kind) پیشفرض اعلان شده باشد به جای استفاده از یک پارامتر kind که برای قابلیت همکاری با C در ماژول ذاتی "ISO_C_Binding" تعریف شده است، هشدار میدهد. این گزینه توسط -Wall به طور ضمنی اعمال میشود.
- -Wcharacter-truncation
- هنگامی که یک انتساب کاراکتری رشته اختصاصیافته را کوتاه میکند هشدار میدهد.
- -Wline-truncation
- هنگامی که خطی از کد منبع کوتاه شود، هشدار میدهد. این گزینه توسط -Wall به طور ضمنی اعمال میشود. برای کد منبع قالبآزاد (free-form)، پیشفرض -Werror=line-truncation است به طوری که کوتاهشدگیها به عنوان خطا گزارش میشوند.
- -Wconversion
- درباره تبدیلهای ضمنی که احتمالاً مقدار عبارت را پس از تبدیل تغییر میدهند هشدار میدهد. این گزینه به طور ضمنی توسط -Wall اعمال میشود.
- -Wconversion-extra
- درباره تبدیلهای ضمنی میان انواع و گونههای مختلف هشدار میدهد. این گزینه به طور ضمنی شامل -Wconversion نمیشود.
- -Wdeprecated-openmp
- درباره استفاده از کدهای منسوخشده OpenMP هشدار میدهد.
- -Wexternal-argument-mismatch
- درباره عدم تطابق آرگومان برای رویههای خارجی صوری هشدار میدهد. این مورد به طور ضمنی توسط -fc-prototypes-external اعمال میشود زیرا تولید یک رابط معتبر C23 در چنین حالتی امکانپذیر نیست. همچنین به طور ضمنی توسط -Wall اعمال میشود.
- -Wextra
- برخی از گزینههای هشدار را برای استفاده از ویژگیهای زبانی که ممکن است مشکلساز باشند فعال میکند. این مورد در حال حاضر شامل -Wcompare-reals، -Wunused-parameter و -Wdo-subscript میشود.
- -Wfrontend-loop-interchange
- هنگام استفاده از -ffrontend-loop-interchange برای انجام جابهجایی حلقه هشدار میدهد.
- -Wimplicit-interface
- اگر رویهای بدون یک رابط صریح فراخوانی شود، هشدار میدهد. توجه داشته باشید که این گزینه فقط وجود یک رابط صریح را بررسی میکند. این گزینه بررسی نمیکند که آیا رابطهای اعلانشده در میان واحدهای برنامه سازگار هستند یا خیر.
- -Wimplicit-procedure
- اگر رویهای فراخوانی شود که نه دارای یک رابط صریح است و نه به عنوان "EXTERNAL" اعلان شده است، هشدار میدهد.
- -Winteger-division
- اگر تقسیم اعداد صحیح ثابت نتیجه خود را کوتاه (گرد رو به پایین) کند، هشدار میدهد. به عنوان مثال، 3/5 مقدار 0 را ارزیابی میکند.
- -Wintrinsics-std
- اگر gfortran رویهای با نام مشابه یک تابع یا رویه ذاتی که در استاندارد در حال حاضر انتخابشده (با -std) در دسترس نیست پیدا کند و به همین دلیل با آن به عنوان یک رویه "EXTERNAL" رفتار کند، هشدار میدهد. -fall-intrinsics میتواند برای رخ ندادن این رفتار و پیوند همیشگی به تابع ذاتی صرفنظر از استاندارد انتخابشده استفاده شود.
- -Wno-overwrite-recursive
- هنگامی که -fno-automatic همراه با -frecursive استفاده میشود هشدار نمیدهد. بازگشت در صورتی که متغیرهای محلی مربوطه ویژگی "AUTOMATIC" را به صراحت اعلان نکرده باشند، دچار اختلال میشود. این گزینه میتواند برای مهار هشدار در زمانی که مشخص است بازگشت دچار اختلال نمیشود استفاده شود. برای محیطهای ساختی که از -Werror استفاده میکنند مفید است.
- -Wreal-q-constant
- اگر یک ثابت لفظی حقیقی (real-literal-constant) شامل حرف توان "q" باشد، یک هشدار تولید میکند.
- -Wsurprising
- هنگامی که
ساختارهای
کد "مشکوک"
مشاهده
میشوند،
یک هشدار
تولید
میکند.
اگرچه از
نظر فنی
مجاز
هستند، اما
معمولاً
نشان
میدهند که
خطایی رخ
داده است.
این گزینه در حال حاضر تحت شرایط زیر هشدار تولید میکند:
- یک ساختار "SELECT CASE" از نوع "INTEGER" دارای یک "CASE" است که هرگز نمیتواند مطابقت یابد زیرا مقدار پایین آن بزرگتر از مقدار بالای آن است.
- یک ساختار "SELECT CASE" از نوع "LOGICAL" دارای سه عبارت "CASE" است.
- یک "TRANSFER" مبدئی را مشخص میکند که کوتاهتر از مقصد است.
- نوع نتیجه یک تابع بیش از یک بار با همان نوع اعلان شده است. اگر -pedantic یا حالت منطبق بر استاندارد فعال باشد، این یک خطا است.
- یک متغیر "CHARACTER" با طول منفی اعلان شده است.
- همراه با -fopenmp، برای کد منبع قالبثابت، زمانی که یک دیدهبان (sentinel) افزونه اختصاصی توزیعکننده "omx" مشاهده شود. (معادل "ompx"، که در کد منبع قالبآزاد استفاده میشود، به طور پیشفرض تشخیص داده میشود.)
- همراه با -fopenacc، هنگام استفاده از ثابتهای نامگذاریشده با بندهایی که یک متغیر میگیرند، زیرا انجام این کار هیچ تاثیری ندارد.
- -Wtabs
- به طور پیشفرض، تبها به عنوان فضای خالی پذیرفته میشوند، اما تبها عضو مجموعه کاراکترهای فرترن نیستند. برای خطوط ادامه، یک تب و به دنبال آن یک رقم بین 1 تا 9 پشتیبانی میشود. -Wtabs باعث میشود در صورت برخورد با تب، هشدار صادر شود. توجه داشته باشید که -Wtabs برای -pedantic، -std=f95، -std=f2003، -std=f2008، -std=f2018، -std=f2023 و -Wall فعال است.
- -Wundefined-do-loop
- اگر یک حلقه "DO" با گام 1 یا -1 منجر به زیرریز یا سرریز در حین تکرار متغیر القایی حلقه شود، هشدار میدهد. این گزینه به طور ضمنی توسط -Wall اعمال میشود.
- -Wunderflow
- هنگامی که عبارات ثابت عددی که منجر به زیرریز میشوند در طول کامپایل مشاهده شوند، هشدار تولید میکند. به طور پیشفرض فعال است.
- -Wintrinsic-shadow
- اگر یک رویه تعریفشده توسط کاربر یا رویه ماژول همنام با یک تابع یا رویه ذاتی باشد هشدار میدهد؛ در این حالت، ممکن است یک رابط صریح یا اعلان "EXTERNAL" یا "INTRINSIC" نیاز باشد تا فراخوانیها بعداً به تابع ذاتی/رویه مورد نظر حل و مرتبط شوند. این گزینه به طور ضمنی توسط -Wall اعمال میشود.
- -Wuse-without-only
- اگر عبارت "USE" فاقد توصیفکننده "ONLY" باشد و در نتیجه تمام موجودیتهای عمومی ماژول استفادهشده را به طور ضمنی وارد کند، هشدار میدهد.
- -Wunused-dummy-argument
- درباره آرگومانهای صوری استفادهنشده هشدار میدهد. این گزینه به طور ضمنی توسط -Wall اعمال میشود.
- -Wunused-parameter
- برخلاف مفهوم gcc از -Wunused-parameter، پیادهسازی gfortran از این گزینه درباره آرگومانهای صوری استفادهنشده هشدار نمیدهد (گزینه -Wunused-dummy-argument را ببینید)، بلکه درباره مقادیر "PARAMETER" استفادهنشده هشدار میدهد. -Wunused-parameter در صورتی که -Wunused یا -Wall نیز استفاده شده باشد، به طور ضمنی توسط -Wextra اعمال میشود.
- -Walign-commons
- به طور پیشفرض، gfortran درباره هر مورد از افزودن لایه فاصلهگذاری به متغیرها برای تراز مناسب در داخل یک بلوک "COMMON" هشدار میدهد. این هشدار میتواند از طریق -Wno-align-commons خاموش شود. همچنین گزینه -falign-commons را ببینید.
- -Wfunction-elimination
- اگر هر گونه فراخوانی به توابع ناخالص توسط بهینهسازیهای فعالشده با گزینه -ffrontend-optimize حذف شود، هشدار میدهد. این گزینه به طور ضمنی توسط -Wextra اعمال میشود.
- -Wrealloc-lhs
- هنگامی که کامپایلر ممکن است کدی را برای تخصیص یا تخصیص مجدد یک متغیر آرایه تخصیصپذیر از نوع ذاتی در انتسابهای ذاتی درج کند، هشدار میدهد. در حلقههای پرتکرار (داغ)، قابلیت تخصیص مجدد فرترن 2003 ممکن است کارایی را کاهش دهد. اگر آرایه از قبل با شکل صحیح تخصیص داده شده است، استفاده از مشخصه کل-آرایه (مانند "(:,:,:)") را برای متغیر در سمت چپ در نظر بگیرید تا از بررسی تخصیص مجدد جلوگیری شود. توجه داشته باشید که در برخی موارد هشدار نشان داده میشود، حتی اگر کامپایلر بررسیهای تخصیص مجدد را با بهینهسازی حذف کند؛ برای نمونه، زمانی که سمت راست شامل همان متغیر ضربشده در یک اسکالر باشد. همچنین گزینه -frealloc-lhs را ببینید.
- -Wrealloc-lhs-all
- هنگامی که کامپایلر کدی را برای تخصیص یا تخصیص مجدد یک متغیر تخصیصپذیر درج میکند هشدار میدهد؛ این شامل مقادیر اسکالر و انواع مشتقشده میشود.
- -Wcompare-reals
- هنگام مقایسه انواع حقیقی یا مختلط برای برابری یا نابرابری هشدار میدهد. این گزینه به طور ضمنی توسط -Wextra اعمال میشود.
- -Wtarget-lifetime
- اگر طول عمر اشارهگر در یک انتساب اشارهگر ممکن است طولانیتر از هدف آن باشد، هشدار میدهد. این گزینه به طور ضمنی توسط -Wall اعمال میشود.
- -Wzerotrip
- اگر مشخص باشد که یک حلقه "DO" در زمان کامپایل صفر بار اجرا میشود، هشدار میدهد. این گزینه به طور ضمنی توسط -Wall اعمال میشود.
- -Wdo-subscript
- اگر یک شاخص
آرایه در
داخل یک
حلقه "DO"
بتواند
منجر به
دسترسی
خارج از
محدوده
شود، حتی
اگر
کامپایلر
نتواند
اثبات کند
که عبارت
واقعاً
اجرا
میشود،
هشدار
میدهد؛ در
مواردی
مانند
real a(3) do i=1,4 if (condition(i)) then a(i) = 1.2 end if end doاین گزینه به طور ضمنی توسط -Wextra اعمال میشود.
- -Werror
- همه هشدارها را به خطا تبدیل میکند.
برخی از این گزینهها هنگام کامپایل برنامههای نوشتهشده به فرترن هیچ تاثیری ندارند.
گزینههای اشکالزدایی برنامه شما (Options for debugging your program)
گنو فرترن گزینههای ویژه گوناگونی دارد که برای اشکالزدایی برنامه شما استفاده میشوند.
- -fdebug-aux-vars
- متغیرهای داخلی ایجادشده توسط فرانتاند gfortran را تغییر نام میدهد و دسترسی به آنها را برای یک اشکالزدا فراهم میسازد. در این حالت نام متغیرهای داخلی با حروف بزرگ و به دنبال آن یک زیرخط (underscore) آغاز میشود. این گزینه برای اشکالزدایی تولید کد کامپایلر همراه با "-fdump-tree-original" و همچنین فعالسازی اشکالزدایی برنامه اجرایی با استفاده از "-g" یا "-ggdb3" مفید است.
- -ffpe-trap=list
- فهرستی از
تلههای
استثنای
ممیز شناور
را برای
فعالسازی
تعیین
میکند. در
بیشتر
سیستمها،
چنانچه یک
استثنای
ممیز شناور
رخ دهد و
تله مربوط
به آن فعال
باشد، یک
سیگنال
"SIGFPE"
ارسال شده و
اجرای
برنامه با
تولید یک
فایل core
متوقف
میگردد که
برای
اشکالزدایی
سودمند است.
list فهرستی
(احتمالاً
خالی)
جداشده با
کاما از none
(برای پاک
کردن تمام
استثناهایی
که باید به
دام
بیفتند)، یا
از
استثناهای
زیر است: invalid
(عملیات
نامعتبر
ممیز
شناور،
مانند
SQRT(-1.0))، zero
(تقسیم بر
صفر)، overflow
(سرریز در
عملیات
ممیز
شناور)، underflow
(زیرریز در
عملیات
ممیز
شناور)، inexact
(از دست
رفتن دقت در
طول
عملیات)، و
denormal (عملیات
روی یک
مقدار
غیرعادی یا
نامتعارف).
پنج
استثنای
نخست
متناظر با
پنج
استثنای
استاندارد
IEEE 754 هستند، در
حالی که
مورد آخر
(denormal) بخشی از
استاندارد
IEEE 754 نیست اما
در برخی
معماریهای
رایج مانند
x86 موجود است.
سه استثنای نخست (invalid، zero، و overflow) اغلب نشاندهنده خطاهای جدی هستند، و مگر اینکه برنامه تدابیری برای مدیریت این استثناها داشته باشد، فعالسازی تلهها برای این سه استثنا احتمالاً ایده خوبی است.
اگر این گزینه بیش از یک بار در خط فرمان استفاده شود، فهرستها با هم ترکیب میشوند: '"ffpe-trap="list1 "ffpe-trap="list2' معادل "ffpe-trap="list1,list2 است.
توجه داشته باشید که یک استثنا پس از فعال شدن غیرفعال نمیشود (شکل منفی وجود ندارد)، مگر با پاک کردن تمام تلهها از طریق تعیین none.
بسیاری از عملیاتهای ممیز شناور، اگر نگوییم اکثر آنها، به دلیل گرد کردن با کاهش دقت همراه هستند، و از این رو "ffpe-trap=inexact" احتمالاً در عمل چندان جالب توجه نخواهد بود.
بهطور پیشفرض هیچ تله استثنایی فعال نیست.
- -ffpe-summary=list
- فهرستی از
استثناهای
ممیز شناور
را مشخص
میکند که
وضعیت پرچم
آنها
هنگام
فراخوانی
"STOP" و
"ERROR STOP" در
"ERROR_UNIT" چاپ
میشود. list
میتواند
none، all یا
فهرستی
جداشده با
کاما از
استثناهای
زیر باشد:
invalid، zero، overflow،
underflow، inexact و denormal.
(برای
توضیحات
مربوط به
استثناها
به -ffpe-trap
مراجعه
کنید.)
اگر این گزینه بیش از یک بار در خط فرمان استفاده شود، فقط آخرین مورد اعمال میشود.
بهطور پیشفرض، خلاصهای برای تمام استثناها به جز inexact نمایش داده میشود.
- -fno-backtrace
- هنگامی که یک خطای جدی زمان اجرا رخ میدهد یا یک سیگنال مرگبار ارسال میشود (خطای بخشبندی، دستور نامعتبر، خطای گذرگاه، استثنای ممیز شناور، و سایر سیگنالهای POSIX که دارای کنش core هستند)، کتابخانه زمان اجرای فرترن تلاش میکند تا ردگیری به عقب (backtrace) مربوط به خطا را چاپ کند. "-fno-backtrace" تولید ردگیری به عقب را غیرفعال میکند. این گزینه فقط بر کامپایل برنامه اصلی فرترن تأثیر دارد.
گزینههای جستجوی دایرکتوری (Options for directory search)
این گزینهها بر نحوه جستجوی گنو فرترن برای فایلهای مشخصشده توسط دستورالعمل "INCLUDE" و محل جستجوی آن برای ماژولهای قبلاً کامپایلشده تأثیر میگذارند.
این موارد همچنین بر مسیرهای جستجوی استفادهشده توسط cpp هنگام پیشپردازش سورس فرترن تأثیر میگذارند.
- -Idir
- بر تفسیر
دستورالعمل
"INCLUDE" (و
همچنین
دستورالعمل
"#include"
پیشپردازنده
cpp) تأثیر
میگذارد.
همچنین توجه داشته باشید که رفتار کلی -I و "INCLUDE" از لحاظ جستجو برای فایلهای header.gcc و موارد مشابه دیگر، تا حد زیادی همانند -I با "#include" در پیشپردازنده cpp است.
این مسیر همچنین برای جستجوی فایلهای .mod هنگامی که ماژولهای قبلاً کامپایلشده توسط گزاره "USE" مورد نیاز باشند، استفاده میشود.
- -Jdir
- این گزینه
محل
قرارگیری
فایلهای
.mod مربوط به
ماژولهای
کامپایلشده
را مشخص
میکند.
همچنین به
فهرست
دایرکتوریهایی
که توسط
گزاره
"USE"
جستجو
میشوند
اضافه
میشود.
مقدار پیشفرض، دایرکتوری جاری است.
- -fintrinsic-modules-path dir
- این گزینه مکان ماژولهای ذاتی (intrinsic) از پیش کامپایلشده را در صورتی که در مکان پیشفرض مورد انتظار کامپایلر نباشند، مشخص میکند.
تاثیرگذاری بر مرحله پیوند (Influencing the linking step)
این گزینهها زمانی وارد عمل میشوند که کامپایلر فایلهای شیء (object files) را به یک فایل خروجی قابل اجرا پیوند میدهد. اگر کامپایلر مرحله پیوند را انجام ندهد، این گزینهها بیمعنی هستند.
- -static-libgfortran
- در سیستمهایی که libgfortran را هم به عنوان یک کتابخانه اشتراکی و هم یک کتابخانه ایستا ارائه میدهند، این گزینه استفاده از نسخه ایستا (static) را اجبار میکند. اگر هنگام پیکربندی کامپایلر هیچ نسخه اشتراکی از libgfortran ساخته نشده باشد، این گزینه تأثیری ندارد.
- -static-libquadmath
- در
سیستمهایی
که libquadmath را هم
به عنوان یک
کتابخانه
اشتراکی و
هم یک
کتابخانه
ایستا
ارائه
میدهند،
این گزینه
استفاده از
نسخه ایستا
(static) را اجبار
میکند. اگر
هنگام
پیکربندی
کامپایلر
هیچ نسخه
اشتراکی از
libquadmath ساخته
نشده باشد،
این گزینه
هیچ تأثیری
ندارد.
لطفاً توجه داشته باشید که کتابخانه زمان اجرای libquadmath تحت مجوز گنو کمتر جامع همگانی (LGPL) منتشر شده است، و پیوند دادن ایستا (استاتیک) به آن، الزاماتی را هنگام بازتوزیع فایلهای باینری حاصل ایجاد میکند.
تاثیرگذاری بر رفتار زمان اجرا (Influencing runtime behavior)
این گزینهها بر رفتار زمان اجرای برنامههای کامپایلشده با گنو فرترن تأثیر میگذارند.
- -fconvert=conversion
- نمایش
دادهها را
برای
فایلهای
قالببندینشده
(unformatted) مشخص
میکند.
مقادیر
معتبر برای
تبدیل در
بیشتر
سیستمها
عبارتند از:
native، حالت
پیشفرض؛
swap،
جابجایی
بین big-endian و little-endian؛
big-endian،
استفاده از
بازنمایی
big-endian برای
فایلهای
قالببندینشده؛
little-endian،
استفاده از
بازنمایی
little-endian برای
فایلهای
قالببندینشده.
در سیستمهای POWER که از -mabi=ieeelongdouble پشتیبانی میکنند، گزینههای بیشتری وجود دارند که میتوانند با کاما با دیگر گزینهها ترکیب شوند. این گزینهها عبارتند از:
- -fconvert=r16_ieee
- استفاده از قالب ۱۲۸-بیتی IEEE برای REAL(KIND=16).
- -fconvert=r16_ibm
- استفاده از قالب long double شرکت IBM برای REAL(KIND=16).
این گزینه تنها زمانی تأثیر دارد که در برنامه اصلی استفاده شود. تعیینکننده "CONVERT" و متغیر محیطی GFORTRAN_CONVERT_UNIT مقدار پیشفرض مشخصشده توسط -fconvert را نادیده میگیرند (override میکنند).
- -frecord-marker=length
- طول نشانگرهای رکورد را برای فایلهای قالببندینشده مشخص میکند. مقادیر معتبر برای length برابر ۴ و ۸ هستند. مقدار پیشفرض ۴ است. این با نسخههای قبلی gfortran متفاوت است، که طول پیشفرض نشانگر رکورد را در اکثر سیستمها ۸ تعیین میکردند. اگر میخواهید فایلهایی سازگار با نسخههای قبلی gfortran بخوانید یا بنویسید، از -frecord-marker=8 استفاده کنید.
- -fmax-subrecord-length=length
- حداکثر طول یک زیررکورد را مشخص میکند. حداکثر مقدار مجاز برای length برابر 2147483639 است که مقدار پیشفرض نیز میباشد. این گزینه تنها برای استفاده توسط مجموعه آزمونهای (testsuite) کامپایلر gfortran کاربرد واقعی دارد.
- -fsign-zero
- هنگامی که فعال باشد، اعداد ممیز شناور با مقدار صفر که بیت علامت آنها تنظیم شده است، در خروجی قالببندیشده به عنوان عدد منفی نوشته میشوند و در تابع ذاتی "SIGN" به عنوان عدد منفی در نظر گرفته میشوند. -fno-sign-zero علامت منفی مقادیر صفر (یا مقادیر گردشده به صفر برای ورودی/خروجی) را چاپ نمیکند و برای سازگاری با Fortran 77، صفر را در تابع ذاتی "SIGN" یک عدد مثبت در نظر میگیرد. مقدار پیشفرض -fsign-zero است.
گزینههای توسعهدهندگان فرترن گنو (GNU Fortran Developer Options)
گنو فرترن دارای گزینههای ویژه گوناگونی است که برای اشکالزدایی کامپایلر گنو فرترن استفاده میشوند.
- -fdump-fortran-global
- فهرستی از شناسههای سراسری را پس از ترجمه به بازنمایی میانفرجام (middle-end) در خروجی تولید میکند. بیشتر برای اشکالزدایی خود کامپایلر گنو فرترن مفید است. خروجی تولیدشده توسط این گزینه ممکن است بین نسخهها تغییر کند. همچنین این گزینه ممکن است برای ویژگیهایی که به تازگی افزوده شدهاند خطاهای داخلی کامپایلر ایجاد نماید.
- -fdump-fortran-optimized
- درخت تجزیه (parse tree) را پس از بهینهسازی پیشفرجام (front-end) در خروجی چاپ میکند. عمدتاً برای اشکالزدایی خود کامپایلر گنو فرترن کاربرد دارد. خروجی تولیدشده توسط این گزینه ممکن است در نسخههای مختلف تغییر کند. همچنین این گزینه ممکن است برای ویژگیهایی که به تازگی اضافه شدهاند، خطای داخلی کامپایلر ایجاد کند.
- -fdump-fortran-original
- درخت تجزیه داخلی را پس از ترجمه برنامه مبدأ به بازنمایی داخلی در خروجی چاپ میکند. این گزینه عمدتاً برای اشکالزدایی خود کامپایلر گنو فرترن مفید است. خروجی تولیدشده ممکن است بین نسخهها تغییر کند. این گزینه همچنین ممکن است برای قابلیتهایی که اخیراً افزوده شدهاند خطای داخلی کامپایلر ایجاد نماید.
- -fdump-parse-tree
- درخت تجزیه داخلی را پس از ترجمه برنامه مبدأ به بازنمایی داخلی در خروجی چاپ میکند. بیشتر برای اشکالزدایی خود کامپایلر گنو فرترن سودمند است. خروجی تولیدشده با این گزینه ممکن است میان نسخههای مختلف تغییر کند. همچنین این گزینه ممکن است برای قابلیتهایی که به تازگی اضافه شدهاند باعث خطای داخلی کامپایلر شود. این گزینه منسوخ شده است؛ به جای آن از "-fdump-fortran-original" استفاده کنید.
- -save-temps
- فایلهای
میانی
معمولاً
«موقت» را
به طور
دائمی
ذخیره
میکند؛
آنها را
همانطور
که تحت -dumpbase و
-dumpdir در GCC شرح
داده شده،
به عنوان
فایلهای
خروجی کمکی
نامگذاری
میکند.
gfortran -save-temps -c foo.F90
فایل ورودی foo.F90 را به foo.fii پیشپردازش میکند، به فایل میانی foo.s کامپایل مینماید، و سپس به فایل خروجی (ضمنی) foo.o اسمبل میکند؛ در حالی که:
gfortran -save-temps -S foo.F
خروجی پیشپردازنده را در foo.fi ذخیره میکند، و سپس به فایل خروجی (ضمنی) foo.s کامپایل مینماید.
گزینههای مربوط به قراردادهای تولید کد (Options for code generation conventions)
این گزینههای مستقل از معماری (machine-independent)، قراردادهای رابط مورد استفاده در تولید کد را کنترل میکنند.
بیشتر این گزینهها دارای هر دو شکل مثبت و منفی هستند؛ شکل منفی -ffoo بهصورت -fno-foo خواهد بود. در جدول زیر، تنها یکی از شکلها فهرست شده است---شکلی که پیشفرض نیست. شما میتوانید شکل دیگر را با حذف یا افزودن no- مشخص کنید.
- -fno-automatic
- با هر واحد
برنامه
(بهجز
مواردی که
با "RECURSIVE"
مشخص
شدهاند)
طوری رفتار
میکند که
گویی دستور
"SAVE" برای
تمام
متغیرهای
محلی و
آرایههای
ارجاعشده
در آن مشخص
شده است.
این گزینه
بر
بلوکهای
عمومی (common blocks)
تأثیری
ندارد.
(برخی
کامپایلرهای
فرترن این
گزینه را
تحت نام -static
یا -save ارائه
میدهند.)
حالت
پیشفرض که
-fautomatic است، از
پشته (stack) برای
متغیرهای
محلی
کوچکتر از
مقدار
تعیینشده
توسط -fmax-stack-var-size
استفاده
میکند.
برای عدم
استفاده از
حافظه
استاتیک از
گزینهٔ -frecursive
استفاده
کنید.
متغیرهای محلی یا آرایههای دارای ویژگی صریح "SAVE" بدون اخطار نادیده گرفته میشوند مگر اینکه گزینهٔ -pedantic اضافه شده باشد.
- -ff2c
- تولید کدی
که برای
سازگاری با
کد
تولیدشده
توسط g77 و f2c
طراحی شده
است.
قراردادهای فراخوانی مورد استفاده توسط g77 (که در اصل در f2c پیادهسازی شده بود) ایجاب میکند توابعی که نوع پیشفرض "REAL" را برمیگردانند در واقع نوع "double" زبان C را بازگردانند، و توابعی که نوع "COMPLEX" را برمیگردانند مقادیر را از طریق یک آرگومان اضافی در دنبالهٔ فراخوانی که به محل ذخیرهٔ مقدار بازگشتی اشاره میکند، برگردانند. طبق قراردادهای فراخوانی پیشفرض GNU، چنین توابعی نتایج خود را درست مانند آنچه در GNU C انجام میدهند بازمیگردانند---توابع با نوع پیشفرض "REAL" نوع "float" در C، و توابع "COMPLEX" نوع "complex" در GNU C را برمیگردانند. علاوه بر این، این گزینه به طور ضمنی شامل گزینهٔ -fsecond-underscore است، مگر اینکه -fno-second-underscore صراحتاً درخواست شده باشد.
این گزینه بر تولید کدی که با کتابخانهٔ libgfortran ارتباط برقرار میکند تأثیری ندارد.
هشدار: ترکیب کد فرترن کامپایلشده با -ff2c با کد کامپایلشده با قراردادهای فراخوانی پیشفرض -fno-f2c ایدهٔ خوبی نیست، زیرا فراخوانی توابع "COMPLEX" یا توابع با نوع پیشفرض "REAL" بین بخشهایی از برنامه که با قراردادهای فراخوانی متفاوتی کامپایل شدهاند در زمان اجرا دچار شکست خواهد شد.
هشدار: این کار کدهایی را که توابع ذاتی (intrinsic) از نوع پیشفرض "REAL" یا "COMPLEX" را بهعنوان آرگومانهای واقعی ارسال میکنند دچار اختلال میکند، زیرا پیادهسازیهای کتابخانه از قراردادهای فراخوانی -fno-f2c استفاده میکنند.
- -fno-underscoring
- نامهای
موجودیتهای
مشخصشده
در فایل
منبع فرترن
را با
افزودن
زیرخط (underscore) به
انتهای
آنها
دگرگون
نکنید.
با فعال بودن -funderscoring، گنو فرترن یک زیرخط به نامهای خارجی اضافه میکند. این کار برای اطمینان از سازگاری با کد تولیدشده توسط بسیاری از کامپایلرهای فرترن یونیکس انجام میشود. توجه داشته باشید که این مورد برای نامهای اعلانشده با C binding یا درون یک ماژول اعمال نمیشود.
هشدار: رفتار پیشفرض گنو فرترن با f2c و g77 ناسازگار است؛ لطفاً در صورتی که میخواهید فایلهای شیء کامپایلشده با گنو فرترن با کد شیء ایجادشده توسط این ابزارها سازگار باشند، از گزینهٔ -ff2c استفاده کنید.
استفاده از -fno-underscoring توصیه نمیشود مگر اینکه در حال آزمایش مواردی مانند یکپارچهسازی گنو فرترن در محیطهای سیستمی موجود باشید (در مقایسه با کتابخانهها، ابزارها و غیرهٔ موجود).
بهعنوان مثال، با -funderscoring و با فرض اینکه j() و max_count() توابع خارجی هستند در حالی که "my_var" و "lvar" متغیرهای محلی هستند، یک دستور فرترن مانند:
I = J() + MAX_COUNT (MY_VAR, LVAR)
بهصورت چیزی شبیه به کد C زیر پیادهسازی میشود:
i = j_() + max_count_(&my_var, &lvar);
با -fno-underscoring، همان دستور بهصورت زیر پیادهسازی میشود:
i = j() + max_count(&my_var, &lvar);
استفاده از -fno-underscoring امکان تعیین مستقیم نامهای تعریفشده توسط کاربر را در حین اشکالزدایی و هنگام ارتباط کد گنو فرترن با زبانهای دیگر فراهم میسازد.
توجه داشته باشید که صرفاً تطابق نامها به این معنا نیست که رابط پیادهسازیشده توسط گنو فرترن برای یک نام خارجی، با رابط پیادهسازیشده توسط زبانی دیگر برای همان نام مطابقت دارد. به بیان دیگر، پیوند دادن کد تولیدشده توسط گنو فرترن به کد تولیدشده توسط کامپایلری دیگر با استفاده از این روش یا هر روش دیگر میتواند تنها بخش کوچکی از راهحل کلی باشد---توافق کد تولیدشده توسط هر دو کامپایلر در مواردی غیر از نامگذاری ممکن است نیازمند تلاش قابلتوجهی باشد، و بر خلاف ناسازگاریهای نامگذاری، پیونددهندهها معمولاً نمیتوانند ناسازگاریها در این بخشهای دیگر را تشخیص دهند.
همچنین توجه داشته باشید که با -fno-underscoring، عدم وجود زیرخطهای الحاقی این احتمال کاملاً واقعی را ایجاد میکند که یک نام خارجی تعریفشده توسط کاربر با نامی در کتابخانهٔ سیستم تداخل پیدا کند، که میتواند یافتن باگهای ارجاع حلنشده (unresolved-reference) را در برخی موارد بسیار دشوار سازد---آنها ممکن است در زمان اجرای برنامه رخ دهند و تنها بهصورت رفتارهای دارای باگ در زمان اجرا نمایان شوند.
همچنین توجه داشته باشید که اعلان نمادها بهصورت bind(C) روشی بسیار مطمئنتر برای برقراری ارتباط با کدهای نوشتهشده به زبانهای دیگر یا کامپایلشده با کامپایلرهای فرترن مختلف، نسبت به گزینههای خط فرمان شرحدادهشده در این بخش است.
- -fsecond-underscore
- بهطور
پیشفرض،
گنو فرترن
یک زیرخط به
نامهای
خارجی
اضافه
میکند. اگر
از این
گزینه
استفاده
شود، گنو
فرترن به
نامهای
دارای
زیرخط دو
زیرخط، و به
نامهای
بدون زیرخط
یک زیرخط
اضافه
میکند.
بهعنوان مثال، یک نام خارجی مانند "MAX_COUNT" بهصورت ارجاع به نماد خارجی زمان پیوند "max_count__" به جای "max_count_" پیادهسازی میشود. این امر برای سازگاری با g77 و f2c الزامی است و با استفاده از گزینهٔ -ff2c نیز بهطور ضمنی فعال میگردد.
اگر -fno-underscoring فعال باشد، این گزینه هیچ تأثیری ندارد. این گزینه بهطور ضمنی توسط گزینهٔ -ff2c فعال میشود.
- -fcoarray=<keyword>
- none
- غیرفعالسازی پشتیبانی از همآرایه (coarray)؛ استفاده از اعلانهای همآرایه و دستورهای کنترل تصویر (image-control) منجر به خطای زمان کامپایل میشود. (پیشفرض)
- single
- حالت تکتصویری، بدین معنی که num_images() همیشه برابر یک است.
- lib
- موازیسازی همآرایه مبتنی بر کتابخانه؛ یک کتابخانهٔ همآرایه مناسب گنو فرترن مانند http://opencoarrays.org باید پیوند داده شود. همچنین، کتابخانهٔ "libcaf_single" متعلق به GCC میتواند پیوند داده شود، اگرچه فقط از یک تصویر پشتیبانی میکند.
- -fcheck=<keyword>
- فعالسازی تولید بررسیهای زمان اجرا؛ آرگومان باید فهرستی از کلمات کلیدی زیر باشد که با کاما از یکدیگر جدا شدهاند. افزودن پیشوند no- به یک بررسی، در صورتی که توسط یک مشخصهٔ قبلی فعال شده باشد، آن را غیرفعال میکند.
- all
- فعالسازی تمام آزمونهای زمان اجرای -fcheck.
- array-temps
- در زمان
اجرا هشدار
میدهد
هرگاه برای
ارسال یک
آرگومان
واقعی،
نیاز به
ایجاد یک
آرایهٔ
موقت بوده
باشد.
اطلاعات
تولیدشده
توسط این
هشدار گاهی
برای
بهینهسازی
و بهمنظور
جلوگیری از
ایجاد چنین
آرایههای
موقتی مفید
است.
نکته: هشدار تنها یکبار به ازای هر مکان چاپ میشود.
- bits
- فعالسازی تولید بررسیهای زمان اجرا برای آرگومانهای نامعتبر به توابع ذاتی دستکاری بیت.
- bounds
- فعالسازی
تولید
بررسیهای
زمان اجرا
برای
اندیسهای
آرایه و در
برابر
مقادیر
حداقل و
حداکثر
اعلانشده.
این گزینه
همچنین
اندیسهای
آرایه را
برای
آرایههای
با شکل
مفروض (assumed) و
معوق (deferred) در
برابر
مرزهای
تخصیصیافتهٔ
واقعی
بررسی
میکند و
تضمین
مینماید
که تمام
طولهای
رشته برای
سازندههای
آرایهٔ
کاراکتری
بدون typespec صریح
با یکدیگر
برابر
باشند.
برخی از بررسیها نیازمند آن هستند که -fcheck=bounds برای کامپایل برنامهٔ اصلی تنظیم شده باشد.
نکته: در آینده ممکن است این گزینه اشکال دیگری از بررسی را نیز در بر گیرد، مانند بررسی ارجاعات زیررشته.
- do
- فعالسازی تولید بررسیهای زمان اجرا برای تغییر نامعتبر متغیرهای تکرار حلقه.
- mem
- فعالسازی تولید بررسیهای زمان اجرا برای تخصیص حافظه. نکته: این گزینه بر تخصیصهای صریح با استفاده از دستور "ALLOCATE" که همواره بررسی میشوند، تأثیری ندارد.
- pointer
- فعالسازی تولید بررسیهای زمان اجرا برای اشارهگرها (pointers) و متغیرهای قابلتخصیص (allocatables).
- recursion
- فعالسازی تولید بررسیهای زمان اجرا برای زیرروالها و توابعی که بهصورت بازگشتی فراخوانی شدهاند اما بهعنوان بازگشتی علامتگذاری نشدهاند. همچنین -frecursive را ببینید. نکته: این بررسی برای برنامههای OpenMP عمل نمیکند و در صورت استفاده همراه با -frecursive و -fopenmp غیرفعال میشود.
مثال: با فرض اینکه فایلی به نام foo.f90 دارید، دستور
gfortran -fcheck=all,no-array-temps foo.f90
فایل را با فعال بودن تمام بررسیهای مشخصشده در بالا به استثنای هشدارهای مربوط به آرایههای موقت تولیدشده، کامپایل میکند.
- -fbounds-check
- نام مستعار منسوخشده برای -fcheck=bounds.
- -ftail-call-workaround
- -ftail-call-workaround=n
- برخی از
رابطهای C
به کدهای
فرترن، با
حذف
آرگومانهای
پنهان طول
کاراکتر، ABI
مربوط به gfortran
را نقض
میکنند.
این امر
میتواند
منجر به
بروز خرابی
و کرش شود
زیرا قرار
دادن (push)
آرگومانها
برای
فراخوانیهای
پایانی (tail calls)
میتواند
موجب سرریز
پشته (overflow the stack)
گردد.
برای ارائه یک راهحل موقت (workaround) جهت بستههای باینری موجود، این گزینه بهینهسازی فراخوانی پایانی را برای روالهای gfortran با آرگومانهای کاراکتری غیرفعال میکند. با -ftail-call-workaround=2 بهینهسازی فراخوانی پایانی در تمام روالهای gfortran با آرگومانهای کاراکتری غیرفعال میشود، و با -ftail-call-workaround=1 یا معادل آن -ftail-call-workaround تنها در روالهای gfortran با آرگومانهای کاراکتری که روالهای دارای پیشنمونهٔ ضمنی (implicitly prototyped) را فراخوانی میکنند، غیرفعال میگردد.
استفاده از این گزینه میتواند منجر به مشکلاتی از جمله کرش به دلیل کمبود فضای پشته (stack space) شود.
بسیار اکیداً توصیه میشود کد مربوطه را اصلاح نمایید. گزینهٔ -fc-prototypes-external میتواند برای تولید پیشنمونههایی که با ABI مربوط به gfortran سازگار هستند، جهت گنجاندن در کد منبع مورد استفاده قرار گیرد.
پشتیبانی از این گزینه احتمالاً در انتشار آیندهٔ gfortran متوقف خواهد شد.
شکل منفی، -fno-tail-call-workaround یا معادل آن -ftail-call-workaround=0، میتواند برای غیرفعال کردن این گزینه به کار رود.
پیشفرض در حال حاضر -ftail-call-workaround است؛ این مورد در نسخههای آینده تغییر خواهد کرد.
- -fcheck-array-temporaries
- نام مستعار منسوخشده برای -fcheck=array-temps.
- -fmax-array-constructor=n
- این گزینه
میتواند
برای
افزایش حد
بالای مجاز
در
سازندههای
آرایه به
کار رود. کد
زیر برای
بسط دادن
آرایه در
زمان
کامپایل،
به این
گزینه نیاز
دارد.
program test implicit none integer j integer, parameter :: n = 100000 integer, parameter :: i(n) = (/ (2*j, j = 1, n) /) print '(10(I0,1X))', i end program test
هشدار: این گزینه میتواند منجر به زمان طولانی کامپایل و فایلهای شیء بیش از حد بزرگ شود.
مقدار پیشفرض برای n برابر ۶۵۵۳۵ است.
- -fmax-stack-var-size=n
- این گزینه
اندازه بر
حسب بایت
بزرگترین
آرایهای
را که روی
پشته قرار
میگیرد
مشخص
میکند؛
اگر اندازه
بیش از این
مقدار شود،
از حافظه
ایستا (static)
استفاده
میشود
(بهجز در
روالهایی
که با
"RECURSIVE"
مشخص
شدهاند).
از گزینه
-frecursive برای
پشتیبانی
از
روالهای
بازگشتی که
فاقد ویژگی
"RECURSIVE"
هستند یا
برای
برنامههای
موازی
استفاده
کنید. برای
استفاده
نکردن
همیشگی از
پشته،
گزینه -fno-automatic
را به کار
ببرید.
این گزینه در حال حاضر فقط بر آرایههای محلی اعلانشده با کرانهای ثابت تأثیر میگذارد و ممکن است برای تمامی متغیرهای نویسهای اعمال نشود. نسخههای آینده GNU Fortran ممکن است این رفتار را بهبود بخشند.
مقدار پیشفرض برای n برابر 65536 است.
- -fstack-arrays
- افزودن این گزینه باعث میشود که کامپایلر فرترن تمام آرایههای با اندازه نامشخص و آرایههای موقت را روی حافظه پشته قرار دهد. اگر برنامه شما از آرایههای محلی بسیار بزرگ استفاده میکند، ممکن است لازم باشد در برخی سیستمعاملها محدودیتهای زمان اجرای حافظه پشته را افزایش دهید. این فلگ به طور پیشفرض در سطح بهینهسازی -Ofast فعال است، مگر اینکه -fmax-stack-var-size مشخص شده باشد.
- -fpack-derived
- این گزینه به GNU Fortran اعلام میکند که اعضای انواع مشتقشده (derived type) را تا حد امکان به طور فشرده بستهبندی کند. کدی که با این گزینه کامپایل شود احتمالاً با کدی که بدون آن کامپایل شده ناسازگار خواهد بود و ممکن است کندتر اجرا شود.
- -frepack-arrays
- در برخی
شرایط،
ممکن است GNU Fortran
بخشهایی
از یک آرایه
با شکل
مفروض (assumed-shape) را
از طریق
توصیفگری
ارسال کند
که
ناحیهای
غیرپیوسته
از حافظه را
توصیف
میکند. این
گزینه کدی
را به مقدمه
تابع
میافزاید
تا دادهها
را در زمان
اجرا در یک
بلوک
پیوسته
مجدداً
بستهبندی
کند.
این کار باید منجر به دسترسی سریعتر به آرایه شود. با این حال، میتواند بار اضافی چشمگیری به فراخوانی تابع تحمیل کند، بهویژه هنگامی که دادههای ارسالشده غیرپیوسته باشند.
- -fshort-enums
- این گزینه برای سازگاری و همکنشپذیری با کد C که با گزینه -fshort-enums کامپایل شده، فراهم شده است. این گزینه باعث میشود GNU Fortran کوچکترین نوع (kind) از "INTEGER" را که مجموعه شمارشی دادهشده در آن جای میگیرد انتخاب کرده و به تمام شمارندههای آن همین نوع را اختصاص دهد.
- -finline-arg-packing
- هنگام
ارسال یک
آرگومان با
شکل مفروض
(assumed-shape) از یک
روال به
عنوان
آرگومان
واقعی به یک
روال با
اندازه
مفروض (assumed-size) یا
اندازه
صریح، یا به
عنوان
آرگومان به
روالی که
رابط صریح
ندارد،
ممکن است
لازم باشد
آرگومان
بستهبندی
شود؛ یعنی
در
حافظهای
پیوسته
قرار گیرد.
نمونهای
از این
حالت،
فراخوانی
"foo" در کد
زیر است:
subroutine foo(a) real, dimension(*) :: a end subroutine foo subroutine bar(b) real, dimension(:) :: b call foo(b) end subroutine bar
هنگامی که -finline-arg-packing فعال باشد، این بستهبندی توسط کد درونخطی (inline) انجام میشود. این امر بهینهسازی بیشتری را میسر میسازد در حالی که حجم کد را افزایش میدهد.
گزینه -finline-arg-packing به طور ضمنی با هر یک از گزینههای -O فعال میشود، مگر در هنگام بهینهسازی برای اندازه از طریق -Os. اگر کد شامل تعداد بسیار زیادی آرگومان باشد که باید بستهبندی شوند، حجم کد و همچنین زمان کامپایل ممکن است بیش از حد افزایش یابد. در چنین مواردی، بهتر است این گزینه غیرفعال شود. موارد بستهبندی را میتوان با استفاده از -Warray-temporaries شناسایی کرد.
- -fexternal-blas
- این گزینه باعث میشود که gfortran برای برخی از عملیات ماتریسی مانند "MATMUL"، به جای الگوریتمهای درونی خود، فراخوانیهایی به توابع BLAS تولید کند، در صورتی که اندازه ماتریسهای مربوطه بزرگتر از یک حد مشخص باشد (گزینه -fblas-matmul-limit را ببینید). این کار در صورت در دسترس بودن یک کتابخانه بهینهشده BLAS از ارائهدهنده میتواند سودمند باشد. کتابخانه BLAS باید در زمان پیوند (link time) مشخص شود. این گزینه یک کتابخانه BLAS با آرگومانهای صحیح از نوع پیشفرض (۳۲ بیتی) را تعیین میکند. این گزینه نمیتواند همراه با -fexternal-blas64 استفاده شود.
- -fexternal-blas64
- باعث میشود gfortran برای برخی عملیات ماتریسی مانند "MATMUL"، به جای استفاده از الگوریتمهای درونی خود، فراخوانیهایی به توابع BLAS تولید کند، در صورتی که اندازه ماتریسهای مربوطه بزرگتر از یک حد معین باشد (گزینه -fblas-matmul-limit را ببینید). این کار در صورت در دسترس بودن کتابخانه BLAS بهینهشده سودمند خواهد بود. کتابخانه BLAS باید در زمان پیوند مشخص گردد. این گزینه کتابخانه BLAS با آرگومانهای صحیح از نوع "KIND=8" (۶۴ بیتی) را مشخص میکند. این گزینه نمیتواند همراه با -fexternal-blas استفاده شود و به یک سیستم ۶۴ بیتی نیاز دارد. همچنین این گزینه مستلزم استفاده از -ffrontend-optimize است.
- -fblas-matmul-limit=n
- تنها زمانی
دارای
اهمیت است
که -fexternal-blas یا
-fexternal-blas64 فعال
باشند. ضرب
ماتریسی
برای
ماتریسهایی
با اندازه
بزرگتر یا
مساوی با n
توسط
فراخوانی
توابع BLAS
انجام
میشود، در
حالی که
سایر موارد
توسط
الگوریتمهای
داخلی gfortran
مدیریت
میگردند.
اگر
ماتریسهای
مربوطه
مربعی
نباشند،
مقایسه
اندازه با
استفاده از
میانگین
هندسی
ابعاد
ماتریسهای
آرگومان و
نتیجه
انجام
میگیرد.
مقدار پیشفرض برای n برابر با 30 است.
- -finline-intrinsics
- -finline-intrinsics=intr1,intr2,...
- تولید کد
درونخطی (inline)
را برای
پیادهسازی
توابع
درونی
فرترن بر
فراخوانی
توابع
کتابخانه
libgfortran ترجیح
میدهد.
استفاده از توابع درونی میتواند یا از طریق فراخوانی تابع کتابخانه libgfortran پیادهسازی شود یا از طریق تولید مستقیم کد درونخطی. برای بیشتر توابع درونی، تنها یک روش پیادهسازی موجود است و انتخابی در کار نیست. با این حال، برخی توابع درونی میتوانند از تابع کتابخانهای یا کد درونخطی بهره ببرند، که در آن کد درونخطی معمولاً فرصتهای بیشتری برای بهینهسازی نسبت به تابع کتابخانهای ارائه میدهد. با گزینههای "-finline-intrinsics=..." یا "-fno-inline-intrinsics=..."، این انتخاب تنها بر توابع درونی موجود در فهرست جداشده با ویرگول که به عنوان آرگومان ارائه شده اعمال میشود.
برای هر تابع درونی، در صورتی که هیچ انتخابی از طریق گزینههای فوق انجام نشده باشد، یک رفتار پیشفرض بر اساس سطح بهینهسازی برگزیده میشود: در صورت عدم بهینهسازی یا بهینهسازی برای حجم کد، فراخوانیهای کتابخانهای تولید میشوند؛ در غیر این صورت کد درونخطی ترجیح داده میشود.
مجموعه توابع درونی مجاز به عنوان آرگومان برای "-finline-intrinsics=" در حال حاضر محدود به "MAXLOC" و "MINLOC" است. اثر این فلگ همچنین محدود به فراخوانیهایی از این توابع درونی است که فاقد آرگومان "DIM" بوده و آرگومان "ARRAY" آنها از نوعی غیر از "CHARACTER" باشد. حالت آرگومان مرتبه ۱ و حضور آرگومان "DIM"، یعنی "MAXLOC(A(:),DIM=1)" یا "MINLOC(A(:),DIM=1)"، برای آرگومان آرایه عددی مرتبه ۱ "A" به صورت بدون شرط درونخطیسازی میشود.
- -finline-matmul-limit=n
- هنگامی که
بهینهسازی
فرانتاند
فعال باشد،
برخی
فراخوانیها
به تابع
درونی
"MATMUL"
درونخطی
میشوند.
این امر
ممکن است در
صورتی که
اندازه
ماتریس در
زمان
کامپایل
قابل تشخیص
نباشد منجر
به افزایش
حجم کد شود،
زیرا کد
برای هر دو
حالت تولید
میگردد.
مقداردهی
"-finline-matmul-limit=0"
درونخطیسازی
را در تمام
موارد
غیرفعال
میکند.
تنظیم این
گزینه با
مقدار n
برای
ماتریسهایی
با اندازه
حداکثر تا n
کد
درونخطی
تولید
میکند. اگر
ماتریسهای
مورد نظر
مربعی
نباشند،
مقایسه
اندازه با
استفاده از
میانگین
هندسی
ابعاد
ماتریسهای
آرگومان و
نتیجه
انجام
میگیرد.
مقدار پیشفرض برای n برابر با 30 است. برای تغییر این مقدار میتوان از "-fblas-matmul-limit" استفاده کرد.
- -frecursive
- امکان بازگشت غیرمستقیم را با اجبار به تخصیص تمام آرایههای محلی روی پشته فراهم میسازد. این فلگ نمیتواند همراه با -fmax-stack-var-size= یا -fno-automatic استفاده شود.
- -finit-local-zero
- -finit-derived
- -finit-integer=n
- -finit-real=<zero|inf|-inf|nan|snan>
- -finit-logical=<true|false>
- -finit-character=n
- گزینه -finit-local-zero
به
کامپایلر
دستور
میدهد که
متغیرهای
محلی
"INTEGER"،
"REAL" و
"COMPLEX" را
با صفر،
متغیرهای
"LOGICAL" را
با مقدار false،
و متغیرهای
"CHARACTER" را
با رشتهای
از
بایتهای
تهی (null)
مقداردهی
اولیه کند.
گزینههای
دقیقتر
مقداردهی
اولیه توسط
گزینههای
-finit-integer=n،
-finit-real=<zero|inf|-inf|nan|snan> (که
بخشهای
حقیقی و
موهومی
متغیرهای
محلی
"COMPLEX" را
نیز
مقداردهی
اولیه
میکند)،
-finit-logical=<true|false> و
-finit-character=n (که در
آن n یک
مقدار
نویسه ASCII است)
فراهم
شدهاند.
با گزینه -finit-derived، مؤلفههای متغیرهای نوع مشتقشده بر اساس این فلگها مقداردهی اولیه میشوند. مؤلفههایی که نوع آنها تحت پوشش یک فلگ صریح -finit-* قرار ندارد، همانند آنچه در بالا با -finit-local-zero توصیف شد رفتار خواهند کرد.
این گزینهها موارد زیر را مقداردهی اولیه نمیکنند:
- اشیای دارای صفت "POINTER"
- آرایههای قابل تخصیص (allocatable)
- متغیرهایی که در دستور "EQUIVALENCE" ظاهر میشوند.
(این محدودیتها ممکن است در نگارشهای آینده برداشته شوند).
توجه داشته باشید که گزینه -finit-real=nan متغیرهای "REAL" و "COMPLEX" را با مقدار NaN آرام (quiet NaN) مقداردهی اولیه میکند. برای یک NaN هشداردهنده (signalling NaN) از -finit-real=snan استفاده کنید؛ با این حال توجه داشته باشید که بهینهسازیهای زمان کامپایل ممکن است آنها را به NaN آرام تبدیل کنند و همچنین تلهگذاری خطاها (trapping) باید فعال شده باشد (برای نمونه از طریق -ffpe-trap).
گزینه -finit-integer مقدار دادهشده را به صورت یک عدد صحیح از نوع INTEGER(kind=C_LONG) روی سیستم میزبان پردازش میکند. سپس این مقدار به متغیرهای صحیح در کد فرترن نسبت داده میشود که در صورت بزرگتر بودن مقدار از ظرفیت نوع، ممکن است منجر به سرریز و چرخش مقدار (wraparound) شود.
در نهایت، توجه داشته باشید که فعالسازی هر یک از گزینههای -finit-* هشدارهایی را که توسط -Wuninitialized برای متغیرهای محلی مربوطه صادر میشدند خاموش میکند.
- -falign-commons
- به طور پیشفرض، gfortran همترازی صحیح تمام متغیرها را در یک بلوک "COMMON" با افزودن لایه پرکننده (padding) در صورت نیاز اعمال میکند. روی برخی پلتفرمها این امر اجباری است و روی برخی دیگر کارایی را افزایش میدهد. اگر یک بلوک "COMMON" در همه جا با انواع داده سازگار اعلان نشده باشد، این پدینگ میتواند مشکلساز شود و از -fno-align-commons میتوان برای غیرفعال کردن همترازی خودکار استفاده کرد. برای تمام فایلهایی که در یک بلوک "COMMON" مشترک هستند باید از شکل یکسانی از این گزینه استفاده شود. برای اجتناب از مشکلات احتمالی همترازی در بلوکهای "COMMON"، توصیه میشود اشیا را از بزرگترین به کوچکترین مرتب کنید.
- -fno-protect-parens
- به طور پیشفرض، پرانتزها در عبارات برای تمام سطوح بهینهسازی رعایت میشوند تا کامپایلر هیچگونه شرکتپذیری مجدد (reassociation) را اعمال نکند. استفاده از -fno-protect-parens به کامپایلر اجازه میدهد تا عبارات "REAL" و "COMPLEX" را جهت تولید کد سریعتر بازآرایی کند. توجه داشته باشید که برای بهینهسازی شرکتپذیری مجدد، گزینههای -fno-signed-zeros و -fno-trapping-math باید فعال باشند. حفاظت از پرانتزها به صورت پیشفرض فعال است، مگر اینکه -Ofast مشخص شده باشد.
- -frealloc-lhs
- طرف چپ قابل تخصیص در یک انتساب ذاتی در صورتی که یا تخصیص نیافته باشد یا شکل متفاوتی داشته باشد، به طور خودکار دوباره تخصیص داده میشود ((re)allocated). این گزینه به طور پیشفرض فعال است، مگر اینکه -std=f95 مشخص شده باشد. همچنین گزینه -Wrealloc-lhs را ببینید.
- -faggressive-function-elimination
- توابع با
فهرست
آرگومانهای
یکسان در
درون
عبارات حذف
و یکی
میشوند،
صرفنظر از
اینکه این
توابع
دارای صفت
"PURE"
باشند یا
خیر. به
عنوان
نمونه، در
a = f(b,c) + f(b,c)
تنها یک فراخوانی به "f" صورت میگیرد. این گزینه تنها در صورتی عمل میکند که -ffrontend-optimize فعال باشد.
- -ffrontend-optimize
- این گزینه بر پایه دستکاری بخشهایی از درخت تجزیه فرترن، بهینهسازی فرانتاند را انجام میدهد. این گزینه به طور پیشفرض توسط هر یک از گزینههای -O بهجز -O0 و -Og فعال میشود. بهینهسازیهای فعالشده توسط این گزینه شامل موارد زیر است:
- *<درونخطیسازی فراخوانیهای "MATMUL",>
- *<حذف فراخوانیهای یکسان توابع در درون عبارات،>
- *<حذف فراخوانیهای غیرضروری به "TRIM" در مقایسهها و انتسابها،>
- *<جایگزینی TRIM(a) با "a(1:LEN_TRIM(a))" و>
- *<اتصال کوتاه عملگرهای منطقی (".AND." و ".OR.").>
میتوان این گزینه را با تعیین -fno-frontend-optimize غیرفعال کرد.
- -ffrontend-loop-interchange
- تلاش برای جابهجایی حلقهها در فرانتاند فرترن در مواردی که سودمند باشد. به طور پیشفرض توسط هر گزینه -O فعال میشود. در حال حاضر، این گزینه تنها بر دستورات "FORALL" و "DO CONCURRENT" با چندین سهتایی forall تأثیر میگذارد.
محیط (ENVIRONMENT)
در حال حاضر کامپایلر gfortran به جز متغیرهایی که بر عملکرد gcc تأثیر میگذارند، از هیچ متغیر محیطی دیگری برای کنترل عملیات خود استفاده نمیکند.
گزارش باگها (BUGS)
برای دریافت دستورالعملهای مربوط به گزارش باگها، ببینید: https://gcc.gnu.org/bugs
همچنین ببینید (SEE ALSO)
gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), gcc(1), as(1), ld(1), gdb(1), dbx(1) و مدخلهای Info برای gcc، cpp، gfortran، as، ld، binutils و gdb.
نویسنده (AUTHOR)
برای آگاهی از مشارکتکنندگان در GCC و GNU Fortran، مدخل Info مربوط به gfortran را ببینید.
حق نشر (COPYRIGHT)
حق نشر (c) 2004-2026 بنیاد نرمافزار آزاد (Free Software Foundation, Inc.)
اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشرشده توسط بنیاد نرمافزار آزاد اعطا میشود؛ با بخشهای تغییرناپذیر «Funding Free Software»، متون روی جلد (الف) (زیر را ببینید)، و با متون پشت جلد (ب) (زیر را ببینید). نسخهای از این مجوز در صفحه راهنمای gfdl(7) گنجانده شده است.
(الف) متن روی جلد FSF عبارت است از:
A GNU Manual
(ب) متن پشت جلد FSF عبارت است از:
You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise funds for GNU development.
| 2026-04-30 | gcc-16.1.0 |