انجمن کاربران لینوکس ایران - تکنوتاکس سابق
اين كد يعني چي؟ - نسخه قابل چاپ

+- انجمن کاربران لینوکس ایران - تکنوتاکس سابق (https://forum.sito.ir)
+-- انجمن: پرسش‌ها و پاسخ‌ها (https://forum.sito.ir/forumdisplay.php?fid=3)
+--- انجمن: لینوکس و برنامه نویسی (https://forum.sito.ir/forumdisplay.php?fid=13)
+--- موضوع: اين كد يعني چي؟ (/showthread.php?tid=15675)



اين كد يعني چي؟ - مهمان - 2010-03-09

کد :
int (*AdhocTest)(int argc, char *argv[]) = NULL;

اين كد رو تاحالا نديده بودم و جايي توي رفرنس هم نبوده.
سرچ هم ميكنم چيزي پيدا نميكنم كه توضيح داده باشه.
يعني چي اين كد؟ چيكار ميكنه؟
مثلا انتهاي يك برنامه در اين صفحه آمده:
<!-- m --><a class="postlink" href="http://www.codeguru.com/cpp/misc/misc/cryptoapi/article.php/c11953/">http://www.codeguru.com/cpp/misc/misc/c ... hp/c11953/</a><!-- m -->


پاسخ: اين كد يعني چي؟ - PC2st - 2010-03-09

این کد یک اشاره‌گر به تابعی با خروجی int و پارامترهای int و argv** است و نام این اشاره‌گر AdhocTest در نظر گفته شده و مقدار NULL به آن داده شده است (یعنی یک اشاره‌گری که آدرس هیچ تابعی در آن ذخیره نشده است).


پاسخ: اين كد يعني چي؟ - مهمان - 2010-03-09

بله اینو که میتونم بفهمم. اینقدر وارد هستم.
اما خب این کد در انتهای برنامه چکار میکنه؟!


پاسخ: اين كد يعني چي؟ - kakilik - 2010-03-09

در مورد Ad hoc testing این مقاله از ویکی‌پدیا رو بخونید:
<!-- m --><a class="postlink" href="http://en.wikipedia.org/wiki/Ad_hoc_testing">http://en.wikipedia.org/wiki/Ad_hoc_testing</a><!-- m -->

برنامه‌نویس احتمالا برای تست‌‌کردن کدش یک Ad hoc test به برنامه اضافه کرده بوده و در نهایت که برنامه به سلامتی و میمنت اجرا شده Ad hoc test را NULL گذاشته.

یک برنامه‌ی کامل‌تر را در اینجا ببینید که چطوری Ad hoc test انجام می‌شود.
<!-- m --><a class="postlink" href="http://www.cryptopp.com/docs/ref/test_8cpp-source.html">http://www.cryptopp.com/docs/ref/test_8cpp-source.html</a><!-- m -->

کد :
00095 int (*AdhocTest)(int argc, char *argv[]) = NULL;
...
00091 int CRYPTOPP_CDECL main(int argc, char *argv[])
...
00324                 else if (command == "a")
00325                 {
00326                         if (AdhocTest)
00327                                 return (*AdhocTest)(argc, argv);
00328                         else
00329                         {
00330                                 cerr << "AdhocTest not defined.\n";
00331                                 return 1;
00332                         }
00333                 }

و یک کاربرد آن را در این کد ببینید:
<!-- m --><a class="postlink" href="http://www.cryptopp.com/docs/ref54/fipsalgt_8cpp-source.html">http://www.cryptopp.com/docs/ref54/fips ... ource.html</a><!-- m -->

کد :
01209 int FIPS_140_AlgorithmTest(int argc, char **argv)
01210 {
...
01288 }
01289
01290 extern int (*AdhocTest)(int argc, char *argv[]);
01291 static int s_i = (AdhocTest = &FIPS_140_AlgorithmTest, 0);



پاسخ: اين كد يعني چي؟ - Folaani - 2010-03-10

خیلی ممنون. من فکر کردم این یک مقولهء مهم و متداولی هست که تاحالا بهش برنخوردم و ازش خبر ندارم. از طرف دیگه در سرچ گوگل هم چیزی پیدا نمیشد جز کدهای مشابه.