انجمن کاربران لینوکس ایران - تکنوتاکس سابق

نسخه ي کامل: اين كد يعني چي؟
شما در حال مشاهده نسخه ي متني اين صفحه هستيد. مشاهده نسخه کامل تر با قالب بندي صحيح

مهمان

کد :
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 -->
این کد یک اشاره‌گر به تابعی با خروجی int و پارامترهای int و argv** است و نام این اشاره‌گر AdhocTest در نظر گفته شده و مقدار NULL به آن داده شده است (یعنی یک اشاره‌گری که آدرس هیچ تابعی در آن ذخیره نشده است).

مهمان

بله اینو که میتونم بفهمم. اینقدر وارد هستم.
اما خب این کد در انتهای برنامه چکار میکنه؟!
در مورد 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);
خیلی ممنون. من فکر کردم این یک مقولهء مهم و متداولی هست که تاحالا بهش برنخوردم و ازش خبر ندارم. از طرف دیگه در سرچ گوگل هم چیزی پیدا نمیشد جز کدهای مشابه.