2012-07-30 30 views
0

我是C++的新手,面臨着下面提到的一個簡單問題。 在Visual C++ 2008,我想#定義類似#define宏中的特殊字符

#define fromThis* toThisPtr 
#define fromThis toThisObj 

我端起那是寫在Linux和需要移植按照以WINAPI一些代碼。我得到的錯誤是 這樣的事情。

error C2008: '*' : unexpected in macro definition 
warning C4005: 'fromThis' : macro redefinition 
see previous definition of 'fromThis' 

我需要在預處理時重新定義fromThis和fromThis。 #define宏中的特殊字符是不允許的? 我該如何處理這段代碼?


編輯-1: 我找了可能的解決了這一點。我正在試圖將* fromThis轉換爲'toThisPtr'。一個建議的解決方案是使用typedefs。我在下面喜歡。

typedef toThisPtr fromThis*; 
typedef toThisObj fromThis; 
這種解決方案的錯誤,我得到

現在是這樣的:

錯誤C2143:語法錯誤:缺少「;」 '*'前 錯誤C2059:語法錯誤:';' 錯誤C2040:'iovec':'toThisObj'與'toThisPtr'之間的間接水平不同'

可以typedef是這個問題的解決方案。替換這個*變成toThisPtr的標準方式是什麼?

回答

3

documentation對於#define說它的第一個參數是一個標識符。標識符只能包含字母,數字和下劃線,並且不能以數字開頭。

因此,fromThis*是不是一個有效的標識符,你不能#define它別的東西。

0

也許你剛剛得到它向後

#define toThisPtr fromThis* 
#define toThisObj fromThis 

這定義了兩個宏叫做toThisPtr和toThisObj。否則,我很難理解你想要做什麼。

+0

他希望在預處理過程中將'fromThis *'替換爲'toThisPtr'。 – 2012-07-30 06:00:54

0

你不能這樣做,你也不應該這樣做。 :)

爲此,我個人使用typedef s而不是宏。

typedef toThisPtr fromThis* 
typedef toThisObj fromThis 

,然後只是做了更換所有。

+1

Typedefs向後,不是? – jahhaj 2012-07-30 06:00:41

+0

@jahhaj是的.... – 2012-07-30 06:01:28

+0

我試過你的建議,但我在vs2008中出錯了| 錯誤C2143:語法錯誤:缺少';'在'*'之前 錯誤C2059:語法錯誤:';' | 錯誤C2040:'iovec':'toThisObj'與'toThisPtr'之間的間接級別不同 在typedef中使用'*'也是錯誤的嗎?是否有任何std的方法來從this *取代toThisPtr。 – user1562021 2012-07-30 06:21:37

0

您不能在名稱中使用*。 從文檔查看摘錄:

可以定義任何有效的標識符作爲一個宏,即使它是一個C 關鍵字

的有效標識符是一個或多個字母,數字或一個序列下劃線字符(_) 。空格,標點符號或 符號都不能作爲標識符的一部分。下劃線只有字母,數字和單個 有效。另外,變量標識符 總是必須以字母開頭。