void (*pf)(int i){
};
根据C ++ 11,我不需要尾随&#39 ;;但是Dev-C ++不仅会抛出警告 - 而且还会出现错误并中断编译。
但如果我宣布
void pf(int i){
}
不再发出任何警告了吗?
答案 0 :(得分:8)
你所展示的两件事情大不相同。
void (*pf)(int i){
};
上面将pf
定义为指向函数的指针获取int
并返回void
,并将值初始化。分号是必需。它与
void (*pf)(int i) = nullptr;
在第二个片段中
void pf(int i){
}
pf
是一个函数,其中包含int
并返回void
。
我猜你的Dev-C ++版本不支持C ++ 11的统一初始化语法。以下应该有效
void (*pf)(int i) = NULL;
答案 1 :(得分:3)
你会写下面的内容吗? (缺少分号。)
int* p
不,在变量声明结束时需要分号。
您尝试做的事情是等效的:
void (*pf)(int i)
这是pf
的变量声明,它是指向具有签名(int) -> void
的函数的指针,因此它需要在行尾添加分号。它是一个函数 pointer 声明,而不是函数声明。
以下是函数声明,最后不需要分号:
void pf(int i) {
}