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