我注意到 C++ 在使用之前声明函数签名方面比 C 更严格,即使函数定义是在实际调用它们的函数之后声明的?
我一直认为 C 的限制性更强,但似乎并非如此。
为什么在制定 C++ 编程语言标准时理念发生了变化?
例如,以下代码在 gcc
命令上运行编译良好,但在尝试使用 g++
#include<stdio.h>
int main()
{
int a=sum(4,6);
printf("%d",a);
return 0;
}
int sum(int a,int b)
{
return a+b;
}
错误是
‘sum’ was not declared in this scope
最佳答案
在较早的(C99 之前)C 标准中,有一种称为“隐式函数声明”的东西,自 C99 以来已被删除。 因此,如果您在 C90 模式下编译,编译器必须支持该“功能”。而在 C++ 中,从未出现过“隐式函数声明”。所以 GCC 出错了。您的代码在现代 C(C99 或更高版本)中也无效。
使用更严格的编译器开关(例如 -std=c99 -Wall -Wextra -pedantic-errors
)进行编译并注意所有诊断。
关于c++ - 为什么 C++ 对函数原型(prototype)(签名)的前向声明更加严格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46645399/