| sparse(1) | General Commands Manual | sparse(1) |
نام (NAME)
sparse - تجزیهکننده معنایی برای C
خلاصه دستور (SYNOPSIS)
sparse [WARNING OPTIONS]... file.c
توضیحات (DESCRIPTION)
برنامه Sparse کدهای منبع C را تجزیه کرده و خطاهای احتمالی را جستجو میکند، و هشدارها را در خروجی خطای استاندارد تولید مینماید.
برنامه Sparse گزینههایی را برای کنترل مجموعه هشدارهای تولیدی میپذیرد. برای فعالسازی هشدارهایی که Sparse به طور پیشفرض صادر نمیکند، از گزینه هشدار مربوطه یعنی -Wsomething استفاده کنید. Sparse برخی از هشدارها را به صورت پیشفرض صادر میکند؛ برای غیرفعال کردن این هشدارها، نقیض گزینه هشدار مرتبط یعنی -Wno-something را ارسال کنید.
گزینههای هشدار (WARNING OPTIONS)
- -fmax-errors=COUNT
- حداکثر تعداد خطاهای نمایشدادهشده را به COUNT تنظیم میکند، که باید یک مقدار عددی یا “unlimited” باشد. محدودیت پیشفرض 100 است.
- -fmax-warnings=COUNT
- حداکثر تعداد هشدارهای نمایشدادهشده را به COUNT تنظیم میکند، که باید یک مقدار عددی یا “unlimited” باشد. محدودیت پیشفرض 100 است.
- -Wsparse-all
- تمام هشدارهای sparse را فعال میکند، به جز مواردی که صراحتاً از طریق -Wno-something غیرفعال شدهاند.
- -Wsparse-error
- تمام هشدارهای sparse را به خطا تبدیل میکند.
- -Waddress-space
- در مورد
کدهایی که
اشارهگرها
به فضاهای
آدرس مختلف
را ترکیب
میکنند،
هشدار
میدهد.
برنامه Sparse صفت گسترشیافته __attribute__((address_space(id))) را روی اشارهگرها مجاز میداند، که نشاندهنده یک مقصد اشارهگر در فضای آدرس id (یک شناسه یا یک عدد صحیح ثابت) است. با -Waddress-space، برنامه Sparse با اشارهگرهایی با انواع هدف یکسان اما فضاهای آدرس متفاوت به عنوان انواعی متمایز رفتار کرده و بر همین اساس هشدار خواهد داد.
همچنین Sparse در مورد تبدیل نوعهایی (cast) که فضای آدرس را حذف میکنند (تبدیل به یک نوع عدد صحیح یا به یک نوع اشارهگر ساده) هشدار میدهد. یک استثنا در این مورد زمانی است که نوع مقصد uintptr_t (یا unsigned long) باشد، زیرا چنین تبدیلهایی اغلب برای «به دست آوردن نمایش مقدار یک اشارهگر در یک نوع عدد صحیح» استفاده میشوند و چنین مقادیری مستقل از فضای آدرس هستند.
برای نادیده گرفتن این هشدارها، از نوعی استفاده کنید که شامل __attribute__((force)) باشد.
برنامه Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-address-space استفاده کنید.
- -Wbitwise
- در مورد
عملیاتهای
پشتیبانینشده
یا عدم
تطابق نوع
با انواع
عدد صحیح
محدودشده
هشدار
میدهد.
برنامه Sparse از یک صفت گسترشیافته، __attribute__((bitwise))، پشتیبانی میکند که یک نوع عدد صحیح محدودشده جدید از یک نوع عدد صحیح پایه ایجاد میکند؛ متمایز از نوع عدد صحیح پایه و از هر نوع عدد صحیح محدودشده دیگری که در همان اعلان یا typedef تعریف نشده باشد. به عنوان مثال، این به برنامهها اجازه میدهد تا typedefهایی برای انواع عدد صحیح با ترتیب بایتهای (endianness) مشخص ایجاد کنند. با -Wbitwise، برنامه Sparse در مورد هرگونه استفاده از یک نوع محدودشده در عملیاتهای حسابی به جز عملیاتهای بیتی، و در مورد هر تبدیل از یک نوع محدودشده به نوعی دیگر، مگر از طریق یک تبدیل نوع که شامل __attribute__((force)) باشد، هشدار خواهد داد.
عبارت __bitwise در نهایت یک «تفکیک قویتر اعداد صحیح» ایجاد میکند، تفکیکی که اجازه نمیدهد شما آنها را با اعداد صحیح غیر بیتی مخلوط کنید، بنابراین اکنون از دست دادن تصادفی نوع بسیار دشوارتر است.
عبارت __bitwise برای *انواع یکتا* است که نمیتوان آنها را با سایر انواع ترکیب کرد، و هرگز نمیخواهید فقط به عنوان یک عدد صحیح تصادفی از آنها استفاده کنید (هرچند عدد صحیح 0 خاص است و اگر درست خاطرم باشد، در سکوت پذیرفته میشود - چیزی شبیه به «NULL» برای اشارهگرها). بنابراین انواع «gfp_t» یا «ترتیب بایت امن» از نوع __bitwise خواهند بود: شما فقط میتوانید با انجام عملیاتهای خاصی که در مورد *آن* نوع بهخصوص میدانند، بر روی آنها عملیات انجام دهید.
برنامه Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-bitwise استفاده کنید.
- -Wbitwise-pointer
- همانند -Wbitwise
است، اما
برای تبدیل
نوعها به
یا از
اشارهگرها
به انواع bitwise.
برنامه Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wcast-from-as
- در مورد
تبدیل
نوعهایی
که یک فضای
آدرس را از
یک نوع
اشارهگر
حذف
میکنند،
هشدار
میدهد.
این شبیه به -Waddress-space است اما در تبدیلها به unsigned long نیز هشدار خواهد داد.
برنامه Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wcast-to-as
- در مورد
تبدیل
نوعهایی
که یک فضای
آدرس را به
یک نوع
اشارهگر
اضافه
میکنند،
هشدار
میدهد.
یک تبدیل نوع که شامل __attribute__((force)) باشد، این هشدار را سرکوب میکند. اگر نوع اصلی uintptr_t (یا unsigned long) باشد، هیچ هشداری تولید نمیشود.
برنامه Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wcast-truncate
- در مورد
تبدیل
نوعهایی
که مقادیر
ثابت را
کوتاهسازی
(truncate)
میکنند،
هشدار
میدهد.
برنامه Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-cast-truncate استفاده کنید.
- -Wconstant-suffix
- در صورتی که
یک ثابت عدد
صحیح از
حداکثر
مقدار
قابلنمایشِ
نوع
مشخصشده
توسط پسوند
نوع آن (در
صورت وجود)
بزرگتر
باشد،
هشدار
میدهد.
برای مثال،
در سیستمی
که intها
۳۲بیتی و
longها ۶۴بیتی
هستند،
ثابت 0x100000000U
بزرگتر از
مقداری است
که توسط یک
unsigned int قابل
نمایش باشد
اما در یک unsigned
long جای
میگیرد.
بنابراین
نوع آن unsigned long
است اما این
موضوع توسط
پسوند آن
مشخص نشده
است. در این
حالت،
میتوان با
استفاده از
پسوند UL
هشدار را
سرکوب کرد:
0x100000000UL.
برنامه Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wconstexpr-not-const
- اگر در جایی
که واقعاً
انتظار یک
عبارت ثابت
میرود، یک
عبارت
غیرثابت
مشاهده
شود، هشدار
میدهد. در
حال حاضر،
این گزینه
هنگام
مقداردهی
اولیه به
شیئی با مدت
ذخیرهسازی
ایستا (static storage duration)
با یک
مقداردهندهای
که یک عبارت
ثابت نیست،
هشدار
میدهد.
برنامه Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wcontext
- در مورد
خطاهای
بالقوه در
همگامسازی
یا سایر
زمینههای
تحدیدشده
هشدار
میدهد.
برنامه Sparse از چندین روش برای تعیین توابع یا دستوراتی که زمینهها را تحدید میکنند (مانند همگامسازی)، پشتیبانی میکند. توابعی با صفت گسترشیافته __attribute__((context(expression,in_context,out_context)) هنگام فراخوانی، مستلزم آن هستند که زمینه expression (برای نمونه، یک قفل) مقدار in_context (یک عدد صحیح غیرمنفی ثابت) را داشته باشد، و با مقدار out_context (یک عدد صحیح غیرمنفی ثابت) بازگردد. برای APIهایی که از طریق ماکروها تعریف شدهاند، از فرم دستوری __context__(expression,in_value,out_value) در بدنه ماکرو استفاده کنید.
با -Wcontext، برنامه Sparse هنگامی که ببیند تابعی زمینه را بدون مشخص کردن آن با صفت context تغییر میدهد، هشدار خواهد داد؛ خواه با کاهش یک زمینه به زیر صفر (مانند آزادسازی یک قفل بدون تصاحب آن)، یا بازگشت با یک زمینه تغییریافته (مانند تصاحب یک قفل بدون آزادسازی آن). همچنین Sparse در مورد بلوکهایی از کد که ممکن است به طور بالقوه با زمینههای متفاوتی اجرا شوند، هشدار خواهد داد.
برنامه Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-context استفاده کنید.
- -Wdecl
- در مورد هر
تعریف
متغیر یا
تابع غیر-static
که فاقد
اعلان قبلی
باشد،
هشدار
میدهد.
نمادهای خصوصی (توابع و متغیرها) که درون یک فایل منبع معین داخلی هستند باید از static استفاده کنند تا امکان بهینهسازیهای بیشتر کامپایلر فراهم شود، امکان تشخیص نمادهای استفادهنشده میسر گردد، و از تکیه کردن سایر کدها بر این نمادهای داخلی جلوگیری شود. نمادهای عمومی که توسط سایر فایلهای منبع استفاده میشوند به اعلانهایی نیاز خواهند داشت که برای آن فایلهای منبع دیگر قابل مشاهده باشد، مانند فایلی سرایند (header). همه اعلانها باید در یکی از این دو دسته قرار گیرند. بنابراین، با -Wdecl، برنامه Sparse در مورد هر تعریف نمادی که نه static باشد و نه دارای اعلان، هشدار میدهد. برای رفع این هشدار، نمادهای خصوصی را static اعلان کنید و اطمینان حاصل نمایید که فایلهای تعریفکننده نمادهای عمومی، ابتدا اعلان نمادها را در دسترس دارند (مانند گنجاندن فایل سرایند مناسب).
برنامه Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-decl استفاده کنید. -Wdeclaration-after-statement هشدار درباره اعلانهایی که در ابتدای یک بلوک قرار ندارند.
این اعلانها در C99 مجاز هستند اما در C89 مجاز نیستند.
Sparse این هشدارها را به طور پیشفرض تنها زمانی صادر میکند که لهجه C روی C89 باشد (یعنی -ansi یا -std=c89). برای غیرفعال کردن آنها، از -Wno-declaration-after-statement استفاده کنید.
- -Wdefault-bitfield-sign
- هشدار
درباره هر
میدان بیتی
(bitfield) بدون
علامت (signedness)
صریح.
میدانهای بیتی دارای علامت پیشفرض مشخصشده در استاندارد نیستند (C99 6.7.2). یک میدان بیتی بدون signed یا unsigned صریح، برای نرمافزارهایی که به محدوده مقادیر موجود وابسته هستند، مشکل سازگاری و انتقالپذیری ایجاد میکند. برای رفع این مشکل، نوع میدان بیتی را به طور صریح به صورت signed یا unsigned مشخص کنید.
Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wdesignated-init
- هشدار
درباره
مقداردهی
اولیه
موضعی
ساختارهایی
که به عنوان
نیازمند
مقداردهندههای
اولیهی
تعیینشده
(designated initializers)
نشانهگذاری
شدهاند.
Sparse ویژگی __attribute__((designated_init)) را فراهم میکند که یک ساختار (struct) را نیازمند مقداردهندههای اولیهی تعیینشده نشانهگذاری میکند. Sparse درباره مقداردهی اولیه موضعی متغیر ساختار یا لیترال ساختار از نوعی که این صفت را دارد، هشدار خواهد داد.
الزام به استفاده از مقداردهندههای اولیهی تعیینشده برای یک نوع ساختار خاص، کدی را که از آن نوع ساختار استفاده میکند از تغییرات در چیدمان (layout) آن نوع محافظت میکند؛ و نیاز به تغییر مقداردهندههای اولیه برای آن نوع را از بین میبرد، مگر اینکه یک فیلدِ حذفشده یا ناسازگار تغییریافته را مقداردهی کنند.
نمونههای متداول این نوع از ساختارها شامل مجموعههایی از اشارهگرهای تابع برای پیادهسازی دستهای از عملیات مرتبط است، که در آنها مقدار پیشفرض NULL برای فیلدی که نام آن در مقداردهی اولیه تعیینشده نیامده، به درستی نشاندهنده عدم وجود آن عملیات خواهد بود.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-designated-init استفاده کنید.
- -Wdo-while
- هشدار
درباره
حلقههای do-while
که بدنه
حلقه را با
آکولاد
احاطه
نمیکنند.
Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wenum-mismatch
- هشدار
درباره
استفاده از
عبارتی با
نوع enum
نادرست
هنگام
مقداردهی
اولیه یک
نوع enum
دیگر،
انتساب به
یک نوع enum
دیگر، یا
ارسال یک
آرگومان به
تابعی که
انتظار یک
نوع enum دیگر
را دارد.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-enum-mismatch استفاده کنید.
- -Wexternal-function-has-definition
- هشدار
درباره
تعاریف
توابعی که
با پیوند
خارجی (external linkage)
اعلان
شدهاند.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-external-function-has-definition استفاده کنید.
- -Wflexible-array-array
- هشدار
درباره
آرایههایی
از
ساختارها
که شامل یک
آرایه
منعطف (flexible array)
هستند.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-flexible-array-array استفاده کنید.
- -Wflexible-array-nested
- هشدار
درباره
قرار گرفتن
ساختارهای
حاوی یک
آرایه
منعطف درون
ساختار، union
یا
آرایهای
دیگر.
Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wflexible-array-sizeof
- هشدار
درباره
استفاده از
عملگر sizeof روی
ساختاری که
شامل یک
آرایه
منعطف است،
احتمالاً
به صورت
بازگشتی.
Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wflexible-array-union
- فعالسازی
هشدارهای
مربوط به
آرایههای
منعطف و unionها.
برای داشتن
هرگونه
تأثیر،
حداقل یکی
از
گزینههای
-Wflexible-array-array، -Wflexible-array-nested
یا -Wflexible-array-sizeof نیز
باید فعال
باشد.
Sparse این هشدارها را به طور پیشفرض صادر میکند.
- -Winit-cstring
- هشدار
درباره
مقداردهی
اولیه یک
آرایه char با
یک رشته
ثابت C که
بیش از حد
طولانی است.
اگر اندازه آرایه char و طول رشته برابر باشند، فضایی برای آخرین نویسه nul رشته در آرایه وجود نخواهد داشت:
char s[3] = "abc";
اگر از آرایه به عنوان یک آرایه بایتی استفاده شود و نه به عنوان رشته C، این هشدار صرفاً نویز و مزاحمت است. با این حال، اگر آرایه به توابعی که با رشتههای C کار میکنند مانند printf(%s) و strcmp ارسال شود، ممکن است مشکلساز شود.
Sparse این هشدارها را به طور پیشفرض صادر نمیکند.
- -Wmemcpy-max-count
- هشدار
درباره
فراخوانی
memcpy()، memset()، copy_from_user()
یا copy_to_user() با
تعداد بایت
بزرگ در
زمان
کامپایل.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-memcpy-max-count استفاده کنید.
این حد مجاز را میتوان با -fmemcpy-max-count=COUNT تغییر داد، که مقدار پیشفرض آن 100000 است.
- -Wnewline-eof
- هشدار در
صورتی که
فایل ورودی
به یک خط
جدید (newline) ختم
نشود.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-newline-eof استفاده کنید.
- -Wnon-pointer-null
- هشدار
درباره
استفاده از
0 به عنوان
یک
اشارهگر NULL.
0 دارای نوع عدد صحیح (integer) است. NULL دارای نوع اشارهگر است.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-non-pointer-null استفاده کنید.
- -Wold-initializer
- هشدار
درباره
استفاده از
نحو پیش از C99
در GCC برای
مقداردهندههای
اولیهی
تعیینشده.
استاندارد C99 یک نحو استاندارد برای فیلدهای تعیینشده در مقداردهندههای اولیه struct یا union ارائه میدهد:
struct structname var = { .field = value };همچنین GCC دارای یک نحو قدیمی و غیراستاندارد برای مقداردهندههای اولیهی تعیینشده است که به پیش از C99 برمیگردد:
struct structname var = { field: value };Sparse در مورد استفاده از نحو غیراستاندارد GCC برای مقداردهندههای اولیهی تعیینشده هشدار خواهد داد. برای رفع این هشدار، مقداردهندههای اولیهی تعیینشده را برای استفاده از نحو استاندارد C99 تبدیل کنید.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-old-initializer استفاده کنید.
- -Wone-bit-signed-bitfield
- هشدار
درباره هر
میدان بیتی
یک بیتی از
نوع signed.
یک میدان بیتی یک بیتی از نوع signed تنها میتواند مقادیر 0 و -1، یا در برخی کامپایلرها تنها 0 را داشته باشد؛ این موضوع منجر به رفتار غیرمنتظره در برنامههایی میشود که انتظار توانایی ذخیره 0 و 1 را داشتند.
Sparse این هشدارها را به طور پیشفرض صادر میکند. برای غیرفعال کردن آنها، از -Wno-one-bit-signed-bitfield استفاده کنید.
- -Wparen-string
- هشدار
درباره
استفاده از
یک رشته
درون
پرانتز
برای
مقداردهی
اولیه یک
آرایه.
نحو استاندارد C استفاده از یک رشته درون پرانتز را به عنوان مقداردهنده اولیه آرایه مجاز نمیداند. GCC این نحو را به عنوان یک افزونه (extension) مجاز میداند. با -Wparen-string، Sparse درباره این نحو هشدار خواهد داد.
Sparse این هشدارها را به طور پیشفرض صادر نمیکند. -Wpast-deep-designator هنگامی که در یک فهرست مقداردهی اولیه (initializer-list)، یک مقداردهی اولیه با تعیینکننده (designator) عمیق (تودرتو) با مقداری بدون تعیینکننده دنبال شود، هشدار میدهد.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wpointer-arith
- در مورد هر
چیزی که به
sizeof یک نوع void
یا تابع
وابسته
باشد،
هشدار
میدهد.
استاندارد C99 اجازه اعمال عملگر sizeof بر روی انواع تابع یا انواع ناقص مانند void را نمیدهد. GCC به عنوان یک افزونه (extension) اجازه اعمال sizeof بر روی این انواع را داده و اندازه آنها را 1 در نظر میگیرد. با -pointer-arith، ابزار Sparse در مورد محاسبات اشارهگر روی اشارهگرهای void یا تابع، و همچنین عباراتی که مستقیماً عملگر sizeof را بر انواع void یا تابع اعمال میکنند، هشدار خواهد داد.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wptr-subtraction-blows
- هنگام
تفریق دو
اشارهگر
به نوعی با
اندازهای
غیر از
توانهای
دو، هشدار
میدهد.
تفریق دو اشارهگر به یک نوع معین، اختلافی بر حسب تعداد آیتمهای آن نوع به دست میدهد. برای تولید این مقدار، کامپایلرها معمولاً باید این اختلاف را بر اندازه آن نوع تقسیم کنند، که میتواند برای اندازههایی غیر از توانهای دو عملیاتی سنگین و هزینهبر باشد.
کدهایی که با استفاده از تفریق اشارهگر نوشته شدهاند اغلب میتوانند در عوض از رویکرد دیگری استفاده کنند، مانند اندیسگذاری آرایه با یک متغیر اندیس صریح، که ممکن است به کامپایلرها اجازه دهد کد کارآمدتری تولید کنند.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wreturn-void
- اگر تابعی
با نوع
بازگشتی void،
یک عبارت void
را
برگرداند،
هشدار
میدهد.
استاندارد C99 این کار را مجاز میداند، و در برخی موارد این قابلیت امکان نوشتن کدهای عمومیتری را در ماکروهایی که از typeof استفاده کرده یا نوعی را به عنوان آرگومان ماکرو دریافت میکنند، فراهم میسازد. با این حال، برخی برنامهها این شیوه را نامناسب تلقی میکنند، و آن برنامهها میتوانند از -Wreturn-void برای دریافت هشدارها در این باره استفاده کنند.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wshadow
- هنگام
اعلان
نمادی که
اعلانی با
همان نام را
در یک حوزه (scope)
بیرونی
میپوشاند
(shadow میکند)،
هشدار
میدهد.
چنین اعلانهایی میتوانند منجر به کدهای مستعد خطا شوند.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wshift-count-negative
- اگر مقدار
شیفت منفی
باشد،
هشدار
میدهد.
Sparse بهطور پیشفرض این هشدارها را صادر میکند.
- -Wshift-count-overflow
- اگر مقدار
شیفت از عرض
عملوند (operand)
بزرگتر
باشد،
هشدار
میدهد.
Sparse بهطور پیشفرض این هشدارها را صادر میکند.
- -Wsizeof-bool
- هنگام
بررسی sizeof یک
_Bool، هشدار
میدهد.
استاندارد C99 اندازه یک _Bool را مشخص نکرده است. GCC بهطور پیشفرض از 1 استفاده میکند.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wtransparent-union
- در مورد
هرگونه
اعلان با
استفاده از
افزونه GCC به
صورت __attribute__((transparent_union))
هشدار
میدهد.
Sparse بهطور پیشفرض این هشدارها را صادر میکند. برای خاموش کردن آنها، از -Wno-transparent-union استفاده کنید.
- -Wtypesign
- هنگام
تبدیل
اشارهگری
به یک نوع
عدد صحیح،
به
اشارهگری
به یک نوع
عدد صحیح با
علامتداری
(signedness) متفاوت،
هشدار
میدهد.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wundef
- در مورد
شرطهای
پیشپردازندهای
که از مقدار
یک نماد
تعریفنشده
پیشپردازنده
استفاده
میکنند،
هشدار
میدهد.
استاندارد C (بخش C99 6.10.1) استفاده از مقدار یک نماد تعریفنشده پیشپردازنده در شرطهای پیشپردازنده را مجاز میشمارد و مشخص میکند که مقدار آن 0 است. با این حال، این رفتار میتواند منجر به خطاهای پنهان و ظریف شود.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- -Wuniversal-initializer
- هشدارهای
ناشی از
استفاده از
'{ 0 }' به جای
'{ }' در انواع
تجمیعی (aggregate types)
را سرکوب
نکرده و
وضعیت ویژه
آن را به
عنوان
مقداردهی
اولیه
همگانی (universal initializer)
نادیده
میگیرد.
هشدارهای
مربوطه به
عنوان مثال
مواردی
هستند که
توسط -Wdesignated-init یا
-Wnon-pointer-null ایجاد
میشوند.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند و با '{ 0 }' مانند '{ }' رفتار میکند.
- -Wunion-cast
- هنگام
تبدیل نوع (cast)
به انواع union
هشدار
میدهد.
Sparse بهطور پیشفرض این هشدارها را صادر نمیکند.
- --arch=ARCH
- معماری هدف
را مشخص
میکند.
برای
معماریهایی
که دارای هر
دو گونهٔ ۳۲
بیتی و ۶۴
بیتی هستند
(mips، powerpc، riscv و sparc)،
نام معماری
میتواند
با پسوند 32
یا 64 همراه
شود.
معماری و اندازهٔ پیشفرض، همان معماری ماشینی است که برای ساخت Sparse استفاده شده است.
- -gcc-base-dir dir
- سرفایلهای سیستمی ارائهشده توسط کامپایلر را در dir/include/ و dir/include-fixed/ جستجو میکند.
- -multiarch-dir dir
- سرفایلهای سیستمی را در زیرشاخهٔ چندمعماری (multiarch) dir جستجو میکند. نام dir معمولاً به شکل سهتایی استانداردشدهٔ گنو (normalized GNU triplet) برای هدف خواهد بود (مانند i386-linux-gnu).
- --os=OS
- سیستمعامل
هدف را مشخص
میکند. این
گزینه تنها
تفاوتهای
اندکی در
انواع
دادههای
از پیش
تعریفشده
ایجاد
میکند.
مقادیر
پذیرفتهشده
عبارتاند
از: linux، unix، freebsd،
netbsd، opensd، sunos، darwin و cygwin.
سیستمعامل پیشفرض، در صورت قابل تشخیص بودن، سیستمعامل ماشینی است که برای ساخت Sparse به کار رفته است؛ در غیر این صورت از برخی تنظیمات عمومی استفاده میشود.
گزینههای اشکالزدایی (DEBUG OPTIONS)
- -fmem-report
- برخی آمارهای مربوط به تخصیص حافظهٔ استفادهشده توسط این ابزار را گزارش میدهد.
سایر گزینهها (OTHER OPTIONS)
- -fdiagnostic-prefix[=PREFIX]
- تمام پیامهای تشخیصی را با PREFIX دادهشده و به دنبال آن ": " پیشوندگذاری میکند. اگر مقداری مشخص نشود، "sparse" به کار میرود. حالت پیشفرض این است که اصلاً از هیچ پیشوندی استفاده نشود.
- -fmemcpy-max-count=COUNT
- حد آستانه را برای هشدارهای صادرشده توسط -Wmemcpy-max-count تعیین میکند. مقدار COUNT برابر با 'unlimited' یا '0' عملاً این هشدار را غیرفعال میکند. حد پیشفرض 100000 است.
- -ftabstop=WIDTH
- فاصلهٔ بین توقفهای تب (tab stop) را تنظیم میکند. این کار به sparse در گزارش درست شمارهٔ ستونها در هشدارها یا خطاها کمک میکند. اگر این مقدار کمتر از ۱ یا بیشتر از ۱۰۰ باشد، این گزینه نادیده گرفته میشود. مقدار پیشفرض ۸ است.
- -f[no-]unsigned-bitfields, -f[no-]signed-bitfields
- علامتدار بودن فیلدهای بیتی (bitfields) را که بدون علامت صریح ('signed' یا 'unsigned') تعریف شدهاند، تعیین میکند. بهطور پیشفرض این فیلدهای بیتی مانند دیگر اعداد صحیح ساده، علامتدار هستند.
- -f[no-]unsigned-char, -f[no-]signed-char
- تعیین میکند که نوع سادهٔ 'char' بدون علامت یا علامتدار باشد. بهطور پیشفرض charها علامتدار هستند.
همچنین ببینید (SEE ALSO)
صفحه خانگی (HOMEPAGE)
فهرست پستی (MAILING LIST)
linux-sparse@vger.kernel.org
مشارکت و گزارش باگها (CONTRIBUTING AND REPORTING BUGS)
ارسال وصلهها و گزارش باگها، و همچنین مباحث مرتبط با Sparse باید از طریق فهرست پستی (linux-sparse@vger.kernel.org) انجام گیرد؛ جایی که توسعه و نگهداری عمدتاً در آنجا صورت میپذیرد. برای ارسال پیام به این فهرست نیازی به عضویت در آن ندارید.
باگها همچنین میتوانند از طریق باگزیلای هسته لینوکس گزارش و پیگیری شوند: http://bugzilla.kernel.org/enter_bug.cgi?component=Sparse&product=Tools . مستندات بیشتر دربارهٔ Sparse در نشانی زیر قابل دسترسی است: https://sparse.docs.kernel.org
نویسندگان (AUTHORS)
پروژهٔ Sparse توسط Linus Torvalds آغاز شد. فهرست کامل مشارکتکنندگان را میتوان در نشانی زیر یافت: https://www.openhub.net/p/sparse/contributors .
در حال حاضر Chris Li نگهدارندهٔ کنونی Sparse است.