指向函数需要的指针;定义之后

时间:2014-05-19 17:06:29

标签: c++ pointers c++11

void (*pf)(int i){
};

根据C ++ 11,我不需要尾随&#39 ;;但是Dev-C ++不仅会抛出警告 - 而且还会出现错误并中断编译。

但如果我宣布

void pf(int i){
}

不再发出任何警告了吗?

2 个答案:

答案 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) {
}
相关问题