2012-04-13 179 views
-1

我正試圖將現有的C++ 32代碼遷移到windows7上的64位代碼與visual studio 2010.我以前從未做過64位編譯。在互聯網引用的幫助下,我做了64位編譯的設置。像VS2010與64位編譯器等,並進行其他配置更改。 在預處理器中,我刪除了WIN32並添加了WIN64。我有一些其他預處理器,如OS_WIN_32和其他一些在我的代碼中特定的處理器。 在WIN32正在使用的代碼中,我添加了額外的條件。 WIN64這只是爲了確保應用程序應該與win32以及win64一起編譯。 當我試圖編譯我得到的編譯錯誤說在64位上遷移32位應用程序的問題

致命錯誤C1189代碼:應該定義

此錯誤是由本地代碼來只有WIN32和WIN64標誌之一:#ERROR我們檢查是否定義了WIN32和WIN64。該代碼如下所示。

#if defined WIN32 && defined WIN64 
# error Only one of the WIN32 and WIN64 symbols should be defined 
#endif 

在VS2010中,如果宏未啓用,宏中的代碼會變灰。在我的代碼中,上面的錯誤也是灰色的。但我仍然得到這個錯誤。

我添加WIN64的代碼包括windows.h。以供參考。

#if defined WIN32 || defined WIN64 
#include <windows.h> 
#include <process.h> 
#endif 

所以我的問題是爲什麼我得到這個錯誤?我們不應該爲64位編譯添加windows.h。我試着通過評論這個包含,但我得到的代碼中使用HANDLE其他錯誤。 如果我去WIN32的定義VS2010指向windef.h文件中的定義。此文件存在於Microsoft SDKs \ windows \ v7.0A \ include文件夾中,即不是我的本地代碼。 爲了保證這個定義在下面給出。

#ifndef WIN32 
#define WIN32 
#endif 

所以我想知道爲什麼編譯器會得到預處理器WIN32和WIN64。

在此先感謝您的幫助。

+0

嘗試一下 「上的64位C/C++應用開發經驗」 - http://www.viva64.com/en/l/和「使用_WIN64/WIN64宏」 - http://www.viva64.com/en/k/0040/ – 2012-04-19 17:27:29

回答

6

你不應該自己定義。應該用來檢查此宏的是

_WIN32 // always defined for Windows apps 
_WIN64 // only defined for x64 compilation 

這些編譯器定義(見here)。

通常情況下,IDE會在命令行中添加前綴不變的宏,以免遺留使用未記錄的前綴版本的舊項目無法構建。他們工作的事實並不是使用它們的理由,當存在備案文件時。


它歸結爲:

#ifdef _WIN32 
    // We're on Windows, yay! 
#ifdef _WIN64 
    // We're on x64! Yay! 
#else // _WIN64 
    // We're on x86 (or perhaps IA64, but that one doesn't matter anymore). Yay! 
#endif // _WIN64 
#else // _WIN32 
    // We're not on Windows, maybe WindowsCE or WindowsPhone stuff, otherwise some other platform 
#endif 
+0

我不確定我是否理解你的解釋。但我沒有添加_WIN64。我添加了WIN64,因爲現有代碼使用的是WIN32(都沒有下劃線),即使windef.h文件中的WIN32定義也來自Microsoft SDK。 如果我誤解了你的解釋,請你詳細解釋一下。對造成的不便表示歉意。謝謝 – novice 2012-04-13 08:56:59

+0

@novice see edit。 – rubenvb 2012-04-13 09:17:09

+0

讀取遊初始應答後葉我編輯如下所示 的#if定義_WIN32代碼&&定義_WIN64 #ERROR只有WIN32和WIN64符號中的一個應該被定義 #ENDIF 仍然我得到了同樣的錯誤。在看到您編輯的響應之後還有一個查詢是x64代碼總是會定義_WIN32和_WIN64。這種理解是否正確?如果是的話,那麼在定義這兩個代碼時,讓代碼拋出錯誤並不是正確的編碼。這是正確的嗎? – novice 2012-04-13 09:38:40

相關問題