【发布时间】:2018-03-20 14:25:43
【问题描述】:
我注意到 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
【问题讨论】:
-
首先需要记住的是,C 和 C++ 是两种完全不同的语言。一旦你记住,不比较两者应该很容易,即使它们在很多事情上都有相似的语法。
-
"compiles fine" 是 "compiles with warnings" - 这对我来说不符合 "fine"
-
因为 Bjarne Stroustrup 认为这是 K&R C 和 C90 的弱点。哎呀,即使是 ISO C 委员会也认为这是一个弱点,并在 C99 中使事情变得更加严格。
-
这不符合现代 C 语言。请设置编译器的警告级别,它会告诉你。
-
是的,它仍然可能意味着它不合格。 C 编译器只需要抱怨违反约束。此外,任何更现代的 gcc 都应该抱怨此代码,可能您的代码仍固定为 C89。从那时起,C 有两个修订版 C99 和 C11。
标签: c++ c function gcc compiler-errors