ما یوه خپرونه ولیده چې PVS د لینکس لاندې تحلیل کول زده کړل، او پریکړه یې وکړه چې دا په خپلو پروژو کې هڅه وکړم. او دا هغه څه دي چې له هغې څخه راوتلي دي.
template <typename T>
auto copy (const void * source, void * destination)
->
std::enable_if_t
<
std::is_copy_constructible<T>::value
>
{
new (destination) T(*static_cast<const T *>(source));
}
هو کلیدي کلمه ده auto مطلب کیدی شي void، دا د هغه څه لپاره دی کړکېو. مګر PVS لاندې پیغامونه تولید کړل:
dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.
ډیر سست سایټ
هو، د هر پیغام تر څنګ په ویب انټرفیس کې د مثالونو سره د ورته تشخیصي توضیحاتو لینک شتون لري. مګر کله چې تاسو په لینک کلیک وکړئ، تاسو باید ډیر وخت انتظار وکړئ، او ځینې وختونه دا پیښیږي 504 د ګیټ وے وخت ختم شو.
ژبه
ټول توضیحات په روسیه کې دي، کوم چې خورا ښه دی. مګر د راپور لینکونه تل د انګلیسي نسخې ته لیږدول کیږي. دا به ښه وي چې ژبه بدله کړئ ترڅو تاسو په روسیه کې سمدلاسه تشخیص وګورئ. ما په انٹرفیس کې داسې اختیار ونه موند.
د کنسول له لارې د تشخیصی کچو سره کار کول ناشونی دی
-a [MODE], --analysis-mode [MODE]
MODE defines the type of warnings:
1 - 64-bit errors;
2 - reserved;
4 - General Analysis;
8 - Micro-optimizations;
16 - Customers Specific Requests;
32 - MISRA.
Modes can be combined by adding the values
Default: 4
او یوازې بیا زه پوهیدم چې دا یو څه ماسکونه دي! او تاسو اړتیا لرئ لنډیزولاو نه اضافه کول معنی د مثال په توګه، د عمومي تشخیص، د مایکرو اصلاح کولو تشخیص او MISRA ترلاسه کولو لپاره، تاسو اړتیا لرئ چې دوی راټول کړئ (4 + 8 + 32 = 44):
pvs-studio-analyzer analyze ... -a 44
د کارن انٹرفیسونو کې د بټ ماسک کارول عموما خراب شکل دی. دا ټول په داخلي توګه لنډیز کیدی شي، او د بیرغونو سیټ د کارونکي لپاره ټاکل کیدی شي.
برسېره پر دې، یو افادیت هم شتون لري plog-converter، کوم چې د انسان د لوستلو وړ جامد تحلیلي معلومات رامینځته کوي. هغه نورې ستونزې لري.
د پروګرام لپاره مرسته plog-converter راپورونه:
-a, --analyzer Specifies analyzer(s) and level(s) to be
used for filtering, i.e.
'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
Default: GA:1,2
ځینې "سطحې" دلته راڅرګند شوي چې مخکې شتون نه درلود، او ما په اسنادو کې د دوی په اړه څه ونه موندل.
په عمومي توګه، دا روښانه نه ده. له همدې امله ما هر څه اعظمي حد ته تنظیم کړل.
په کیچ کې د احمقانو یوه ډله
د دریو پروژو څخه دوه چې ما تحلیل کړي د یونټ ازموینې کتابتون کاروي Catch2. او د پیغامونو لویه برخه (!!! 90 له 138 څخه په یوه کې او 297 له 344 څخه په بل کې!!!) لاندې بڼه لري:
ملټي ریډینګ په پام کې نه نیسي
د نه بدلیدونکي تغیراتو یا نه ختمیدونکي لوپونو په اړه ډیری غلط مثبتونه شتون لري ، پداسې حال کې چې د دې متغیرونو سره کار د مختلف تارونو څخه پیښیږي ، او که دا داسې نه وي ، نو د واحد ازموینې به کار ونکړي.
په هرصورت، ایا یو جامد شنونکی کولی شي دا په پام کې ونیسي؟ نه پوهیږم.
هڅه وکړئ په پلیټ فارم پورې تړلي شیان ونه کاروئ که چیرې معیاري انلاګونه شتون ولري ، او که تاسو په بشپړ ډول د دوی پرته نشي کولی ، نو د میکرو (یا بل څه) لپاره په ځانګړي بلاکونو کې یې وتړئ او په ساده ډول اجازه مه ورکوئ چې ستاسو کوډ د غیر ملاتړ شوي شرایطو لاندې تنظیم شي.
د معیاري عملیاتو سیمانټیکونو ته ولاړ شئ
اضافه باید اضافه وي، ضرب باید ضرب وي، فنکشن کال باید فنکشن کال وي، کاپي باید کاپي وي، کیری باید کیری وي، کانټینر باید تکراري وي، تکرارونکی باید ترویج ولري ++ او حواله کول *. او داسې نور او داسې نور.
زه فکر کوم چې نظر روښانه دی. دلته تاسیس شوي کنوانسیونونه شتون لري چې پابند ندي، مګر دا چې ستاسو د کوډ ټول کاروونکي او لوستونکي د لیدلو تمه لري. هڅه مه کوه چې نورو ته سپکاوی وکړئ، که نه نو تاسو به خپل ځان مات کړئ.
مناسب کوډ ولیکئ
تر ټولو لومړی، زما مطلب معیاري کتابتون دی. دا خورا مطلوب دی چې ستاسو د ټولګیو او دندو انٹرفیسونه د معیاري او نورو کتابتونونو سره وکارول شي (د مثال په توګه ، بوسټ).