无法在visual studio 2012中编译C语言

时间:2013-04-02 10:05:35

标签: c visual-studio

我有一个旧的c项目,它使用许多变量名,导致它无法在c ++,newthis等中编译。

所以试着看看我是否可以编译它我已经完成了这个:

  1. 新的空C ++项目
  2. 添加了一个新类,重命名了文件.c(下面的代码)
  3. 清空了头文件
  4. 项目属性 - > C / C ++ - >高级 - >编译为=编译为C代码(/ TC)
  5. TEST.C:

    #include "Test.h"
    
    int test()
    {
        int new = 123;
        return new;
    }
    

    但是它仍然抱怨new,所以它没有把它编成纯粹的C.我错过了什么?

    修改

    我知道newthis等是c++中的保留名称。但是我试图将其编译为c并且我试图避免在重大项目中重命名。如果我告诉它编译为c,为什么它仍然强制执行这些保留名称?

3 个答案:

答案 0 :(得分:2)

见答案:

https://stackoverflow.com/a/5770919/1191089

还有一些额外的标志可以禁用可能适用的Microsoft扩展。

我知道它没有回答这个问题,但是您可能会发现更改变量名称的工作量更少,搜索和替换名为“this”和“new”的变量只需要5分钟。

答案 1 :(得分:1)

new是用于分配内存的保留标识符,如

int* i = new int(123);

您无法使用它。切换到变量的其他名称,例如

#include "Test.h"

int test()
{
    int i = 123;
    return i;
}

C ++的保留字可以方便地放在几个组中。在第一组中,我们将那些同样存在于C编程语言中的内容放到了C ++中。其中有32个,这里是:

auto   const     double  float  int       short   struct   unsigned
break  continue  else    for    long      signed  switch   void
case   default   enum    goto   register  sizeof  typedef  volatile
char   do        extern  if     return    static  union    while

还有另外30个保留字不在C中,因此对C ++来说是新手,这里它们是:

asm         dynamic_cast  namespace  reinterpret_cast  try
bool        explicit      new        static_cast       typeid
catch       false         operator   template          typename
class       friend        private    this              using
const_cast  inline        public     throw             virtual
delete      mutable       protected  true              wchar_t

取自here

答案 2 :(得分:0)

您没有将C源代码编译为C代码,您需要将代码迁移到C ++,这涉及替换变量名称,这些变量在c ++中用作关键字。