以下問題Function pointer in Visual Studio 2012我已經開始想知道某些任務的合法性C.函數指針賦值
到函數指針下面的代碼以警告編譯,就像我所期望的,因爲分配的功能要求更參數比函數指針聲明描述(GCC 4.8):如果改變代碼,使得分配的功能需要更少PARAM出現
#include <stdio.h>
int test(int x, int y)
{
printf("%d", x);
printf("%d", y);
return 0;
}
int main()
{
int (*test_ptr)(int);
test_ptr = test;
test_ptr(1);
return 0;
}
相同的警告eters(GCC 4.8)。再次,這是預期的。
然而,下面的代碼編譯沒有一個單一的警告,儘管分配的功能需要2個參數,而不是0(GCC 4.8):
#include <stdio.h>
int test(int x, int y)
{
printf("%d", x);
printf("%d", y);
return 0;
}
int main()
{
int (*test_ptr)();
test_ptr = test;
test_ptr();
return 0;
}
否鑄件的任何地方參與。
任何人都可以解釋這種編譯器的行爲嗎?
即使使用C99? – SomeWittyUsername 2013-03-27 08:10:13
@icepack C99不棄用具有未指定數量參數的函數。 – 2013-03-27 08:11:34
謝謝大家,傻我 – SomeWittyUsername 2013-03-27 08:12:36