2013-04-02 164 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

相關問題