2010-05-31 70 views
0

我試圖用Visual C++ 2010 Express編譯一些源代碼。該代碼爲GCC編寫,幷包含屬性是這樣的:Visual C++ 2010解決方案範圍宏參數

struct something { 
... 
} __attribute__((packed)); 

因爲這不是標準C++的語法時,Visual C++不承認它​​。有了這個宏之前的結構聲明,它工作正常:

#define __attribute__(p) 

但我不想改變這些文件。我創建了一個新的屬性表(GccCompat),併到預處理定義,並添加宏,就像這樣:

__attribute__(p) 

或像這樣:

__attribute__(p)= 

但它不工作。它根本不叫。如果我在相同位置僅定義了__attribute__(不帶參數),則宏定義正確。請注意,生成的命令行看起來很好(帶參數的宏與沒有參數的宏完全相同),但編譯器似乎忽略了它。那麼,我如何用參數全局定義我的宏呢?

+0

這是一個錯誤? GCC擴展是'__attribute__',但是你在問題的MSVC部分提到'__attributes__'。 – 2010-05-31 14:35:32

+0

這是一個錯字。我在實際項目中使用了__attribute__。 – OregonGhost 2010-05-31 14:37:42

回答

1

這可能是不可能的,至少是這樣。請注意,微軟的documentation of the /D option沒有爲需要參數的宏指定語法。

+0

既然你寫過「至少這樣」,我也會接受其他方式:)我只是不想改變原來的代碼,如果沒有必要的話。不過,如果我沒有找到更好的解決方案,我會爲包裝添加條件編譯。 – OregonGhost 2010-05-31 14:39:56

1

在IDE中定義宏通常關注爲編譯器創建/ D:CPP_TOKEN標誌的性質,即#define CPP_TOKEN。

在你可以定義這樣一個宏爲/ d的高級編譯器設置:「屬性(P)=/什麼 /」或類似的東西。只需打開VS命令提示符,看看它說什麼。 GCC 4.2將允許類似的東西(使用它的-D開關),但我沒有MSVC10方便。

+0

請注意,將具有參數的宏添加到屬性表*將生成'/ D「__attribute __(p)」'作爲命令行。它只是不起作用。然而,「高級」似乎是一個好點:在高級C++選項中,有一個強制包含文件選項。我用所需的定義創建了一個小文件,並將其添加爲強制包含,並且它可以工作。現在,出於某種奇怪的原因,我發現了'__attribute'(沒有尾部下劃線)...... – OregonGhost 2010-05-31 14:44:38

相關問題