Som*_*ame 4 c compiler-errors function-pointers
在Visual Studio 2012中的函数指针问题之后,我开始怀疑C中函数指针的某些赋值的合法性.
下面的代码以警告编译,就像我所期望的,因为分配的功能,需要更多的比的函数指针声明描述(参数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)(int);
test_ptr = test;
test_ptr(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果更改代码以使分配的功能需要较少的参数(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;
}
Run Code Online (Sandbox Code Playgroud)
任何地方都不会有铸件.
谁能解释这个编译器行为?
下列:
int (*test_ptr)();
Run Code Online (Sandbox Code Playgroud)
采用未指定数量的参数,而不是零参数.
对于后者,写
int (*test_ptr)(void);
Run Code Online (Sandbox Code Playgroud)
PS调用零参数的零参数函数会导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |