编辑:好的,我想我现在明白了:
情况1:
#include <stdio.h>
#define function(_a) ((_a)*2)
int main () {
int (*func)(int) = function(0); // function(0) = 0
func(7);
...
}
语法没问题,但是,在运行时,main 将尝试访问地址 NULL ,这将导致 windows 中的软件崩溃/unix 环境中的分段错误。
案例二:
#include <stdio.h>
#define function(_a) ((_a)*2)
int main () {
int (*func)(int) = function;
func(7);
...
}
编译错误,因为“函数”实际上是一个宏,而不是一个实际的函数,因此,指向函数的指针不能指向它,可以这么说。
案例3(正确代码):
#include <stdio.h>
int function(int _a){return ((_a)*2);};
int main () {
int (*func)(int) = function;
func(7);
...
}
这次我做对了吗?