2013-04-02 54 views
0

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

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

  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,为什么它仍然执行这些保留名称?

+0

new是C++,纯c是malloc。您的旧项目是C++ –

+2

@PeteBel'new'只是在旧项目中用作变量名称,就像在测试方法中一样。 – weston

+0

你是对的,对我来说。 –

回答

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 

有一些是不是在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 

取自here

+0

谢谢,但'新'保留在'C++'中,我试图避免通过重命名在一个大型项目。如果我告诉它编译为'c',为什么它仍然执行这些保留名称? – weston

+0

感谢关键词列表,所以你可以看到'new'不是'c'中的保留名。所以我应该能够正确使用它? – weston

+0

在这种特殊情况下,是的。但我不相信你会逃避它... –

2

在这里看到了答案:

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

有一些额外的标志来禁用Microsoft扩展,它可以适用。

我知道它并没有回答这个问题,但是你可能会发现改变你的变量名不那么费力,搜索和替换名为“this”和“new”的变量只需要5分钟。

+0

谢谢,它虽然没有帮助。我放弃搜索和替换的原因是“新”,“这个”等出现在评论中,我不想改变。 – weston

+0

重命名为“new_”可以让您避开关键字,但仍然保持人类的可读性。不理想,但可行。 – Stefan

+0

谢谢,我现在已经这样做了,但它远不止命名。我有一个意识,如果命名是一个问题,那么将会有其他的C/C++冲突,我是对的。我需要得到这个编译没有改变,毕竟它是有效的。感谢您的帮助。 – weston

0

您不是将C源代码编译为C代码,而是需要将代码迁移到C++,这涉及替换C++中用作关键字的变量名称。

+0

好吧,所以我绝对不能编译这个代码作为C使用VS? – weston

相关问题