【问题标题】:Can't compile c in visual studio 2012 part II无法在 Visual Studio 2012 第二部分中编译 c
【发布时间】: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,所以它不知道该选择哪个。

出现的其他问题包括:

  1. Int 不是默认类型,例如static x = 1; 失败了
  2. 参数类型可以在c中的签名之后但在正文之前定义,但不能在c++中定义

等等。在这个项目上进行转换基本上不是一件简单的工作。我不想改变它的另一个原因是它仍然必须在另一个 C 编译器中编译。

所以我不是要解决这些问题,它们非常明显,只是在这个庞大的项目上很耗时。我正在寻找一种在 Visual Studio 中几乎“按原样”编译 c 的方法,或者是明确的“不,这是不可能的”。

我尝试过的:

  1. 通过 Project->Properties->C/C++->Advanced->Compile as C Code 强制 c 编译
  2. 通过项目->属性->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


【解决方案1】:

pow(10.0, 10.0) 或 pow((double)10, (double)10) 呢?它会给你的代码带来麻烦吗?

【讨论】:

  • 我认为pow 函数只是 OP 试图解决的问题类型的一个例子,而不是实际问题。
  • 没错。就像我说的,解决方案非常简单,只是我遇到了几十个这样的问题,这是一个巨大的项目。
猜你喜欢
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多