c++ - 函数的隐式声明可以在 gcc 中编译,但不能在 g++ 中编译

标签 c++ c gcc

我有以下缺少函数的 C 代码

test1.c

#include <stdio.h>

int main(){
 Log("hello");
 return 0;
}

使用gcc -c test1.c将其编译为目标文件会生成一个带有警告的目标文件(链接当然会失败)。

使用g++将相同的代码(使用iostream而不是stdio.h)编译到目标文件甚至无法编译,并且会提示错误:使用未声明的标识符“Log” 。 为什么gcc没有停止编译而g++却停止了?

最佳答案

C++ 不允许调用未声明的函数。然而,在C99之前,C中有时允许未声明的函数。因此,该代码在C++中必须导致编译时错误,但在C89中可以成功编译(尽管链接会发现没有假设的 Log 的定义) .)

自 C99 起,不允许使用未声明的函数。

关于c++ - 函数的隐式声明可以在 gcc 中编译,但不能在 g++ 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660681/

相关文章:

c++ - 我可以使用 mysql_real_connect 连接到服务器而无需使用 MySQL/C 提及数据库吗?

在 c (gcc) centos 7 中实现的 unix 域套接字中的连接错误

c - macOS 和 Linux 下 qsort() 结果存在无法解释的差异

c - 我是否应该针对 I/O 应用程序的大小 (-Os) 进行优化

c++ - 具有 bool 字段默认初始化的结构?

c++ - 正在将未初始化的变量传递给另一个函数 UB

c - 为什么我将环境设置为 UTF8 却没有打印出这些 Unicode 字符?

c++ - 编译器可以从一个全局变量中读取两次,而不是存储一个本地变量吗?

c++ - 模数为哈希表中的地址创建错误的 int?

c++ - Gtkmm 标签未成功插入列表框