.c作为C ++的文件扩展名不可移植

2021-05-13 19:17:11

一些项目使用.c作为C ++源代码的文件扩展名。这是不明智的,因为它可以' t真的是自动和可靠地工作。假设我们有一个文件源.c,具有以下内容:

请注意,该命令使用C编译器,而不是C ++。仍然,编译器将自动检测到扩展名并将其编译为C ++。现在让' s使用Visual Studio做同样的事情:

$ cl / nologo / c source.c source.c源(1):错误c2061语法错误:标识符' foo' <一堆其他错误>

在这种情况下,Visual Studio已选择将其编译为普通C.这两个编译器之间的默认值是相反的,导致问题。

最佳解决方案是将文件扩展更改为明确的一个。以下是一个简单的zsh片段,它是重命名部分的:

如果是不可能的话,您需要使用Visual Studio使用/ TP编译器交换机使其将源编译为C ++而不是C.请注意,如果在目标上使用此参数,则所有文件都是C ++的,甚至是C ++普通的C.这是不可靠的,可以导致奇怪的错误。因此,您应该重命名文件。