在Visual Studio 2012不能编译C(Can't compile C in vi

2019-10-17 22:50发布

我有一个使用很多的变量名是导致它不是在C ++编译,旧的C ++项目newthis

所以要尝试,看看我能得到它编译我已经做到了这一点:

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

TEST.C:

#include "Test.h"

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

但它仍然抱怨new ,所以它不是编译它作为纯C.我缺少什么?

编辑

我知道, newthis等在保留的名称c++ 。 但是我想这个编译作为c我试图避免去,虽然在一个大项目重新命名。 如果我告诉它来编译为c ,为何仍执行这些保留名称?

Answer 1:

看到这里的答案:

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

还有一些附加的标志,以禁用Microsoft扩展,它可以适用。

我知道它不回答这个问题,但你可能会发现,这是较少的努力来改变你的变量名,搜索和替换的变量称为“this”和“新”将只需要5分钟。



Answer 2:

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

有迹象表明,是不是在C另外30个保留字,因此新的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

取自这里 。



Answer 3:

你是不是在编译C源的C代码,你需要迁移的代码C ++,其中涉及更换的变量,这是在C ++作为关键字名。



文章来源: Can't compile C in visual studio 2012