我知道有人问是否可以不带括号调用函数,答案是否定的,但在我的代码中有效,我想知道为什么。
typedef struct{
//some variables
} REG;
long foo(){
//some code
return 23; //i.e 23, it could be any positive integer
}
REG * foo1(REG **ptr){
//some code
*ptr = calloc( (int) foo , sizeof(REG)); //foo without ()
//more code
fread(*ptr,sizeof(REG), foo(), fp);
return *ptr;
}
我在 xcode 中编译,它没有给出错误/警告。
最佳答案
也许我遗漏了什么,但这看起来像是在获取 foo
函数的地址,将其转换为 int
,然后使用那个 int
作为 calloc
的第一个参数 (num
)。这很可能会分配大量内存,而不是只够您认为它正在分配的 23 个元素,这就解释了为什么 fread
不会导致任何错误。
关于在 C 中调用不带括号的函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50538849/