【发布时间】:2013-04-02 11:13:50
【问题描述】:
在我的previous question 中,我询问了编译c 的问题,因为C++ 的保留字比C 多,我现在在一些重命名后意识到,这是楔子的薄弱环节。
示例:Test.c:
#include <math.h>
int test()
{
int n = pow(10, 10);
return n;
}
因为 C++ 中的 math.h 定义了 pow 的重载,而这些都不是 int, int,所以它不知道该选择哪个。
出现的其他问题包括:
- Int 不是默认类型,例如
static x = 1;失败了 - 参数类型可以在
c中的签名之后但在正文之前定义,但不能在c++中定义
等等。在这个项目上进行转换基本上不是一件简单的工作。我不想改变它的另一个原因是它仍然必须在另一个 C 编译器中编译。
所以我不是要解决这些问题,它们非常明显,只是在这个庞大的项目上很耗时。我正在寻找一种在 Visual Studio 中几乎“按原样”编译 c 的方法,或者是明确的“不,这是不可能的”。
我尝试过的:
- 通过 Project->Properties->C/C++->Advanced->Compile as C Code 强制 c 编译
- 通过项目->属性->C/C++->语言->禁用语言扩展关闭扩展
【问题讨论】:
-
其他编译器是否能够处理c++?这将使代码共享变得更加容易......
-
哪种转换是向后不兼容的?在编译为 c 代码时,引入默认类型或更强的类型不会造成麻烦。
-
请注意,在 C89(这是 VS,IINM 支持的最新版本)中,
pow的原型是double pow(double x, double y);` -
"
static x = 1;is a fail" 在 C 中也是如此。“参数类型可以在签名之后但在 c 中的正文之前定义”哦,所以你处理古老的 K&R 风格的代码。那很糟。但应该编译为 C89。编译器具体说了什么? -
@DanielFischer“错误:缺少显式类型(假定为'int')”
标签: c visual-studio