2011-04-21 46 views
6

我正在使用原語C解析器不處理預處理器指令。C預處理程序正在刪除__align__和__attribute__

我可以用-E開關預處理大部分標題,沒有問題。

最近我發現案例屬性對齊是否存在。

我就先用這個調整擺脫他們:

gcc -D "aligned(ARGS)" \ 
    -D "__align__(ARGS)" \ 
    -D "__attribute__(ARGS)" \ 
    -E /usr/local/include/fancyheader.h 

更新:

但沒有成功,例如:

struct __attribute__((aligned(16))) long4 
{ 
    long int x, y, z, w; 
}; 

以上陳述轉化爲,與「1」待定約

struct 1 long4 
{ 
    long int x, y, z, w; 
}; 

誰知道擺脫__align__和__attribute__擴展名的正確方法?

+2

好吧,這個原始的C語言分析器是什麼,你想用它做什麼?當你試圖用-D指令去掉那些東西?只是「沒有成功」告訴我們什麼都沒有。 – 2011-04-21 15:56:57

+0

如果你指定'gcc -xc -D ....',會發生什麼? – 2011-04-21 16:03:16

回答

10

當您使用-D "aligned(ARGS)="會發生什麼?

+0

這對我很有用。除了你需要刪除引用標記 – TonyK 2011-04-21 16:08:42

+0

這是行得通的。但爲什麼需要=? – fabrizioM 2011-04-21 16:10:45

+3

默認情況下(如果沒有'='),-D選項定義宏擴展爲'1' – 2011-04-21 16:16:29

0

如何使用-U選項取消定義所有內置宏和預定義宏,然後使用-D選項創建新定義?

+0

我得到這個錯誤::錯誤:宏名稱必須是標識符 – fabrizioM 2011-04-21 16:14:52

3

預處理器將值1分配給命令行上定義的所有宏,而不指定替換列表。例如,如果使用-DFOO編譯:

std::cout << FOO << std::endl; 

將打印1。如果你想明確地設置宏替換列表爲空使用-DFOO=(或者在你的情況下爲-D__align__(x)=