[問題] macro定義問題 (已解決)
開發平台(Platform): (Ex: Win10, Linux, ...)
windows 10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc 4.4.4
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
none
問題(Question):
我需要把一些變數放到section裡
__attribute__((section(.data.james.foo1))) int var1;
__attribute__((section(.data.james.foo2))) int var2;
主要是foo1, foo2那邊會改
因此我想要做個marco,做到這樣
MY_SECTION(foo1) int val1;
MY_SECTION(foo2) int val2;
試著寫了
#define MY_SECTION(name) __attribute__((section(.data.james.##name)))
不過無法通過編譯
想知道要怎麼修改,才能正確的達到我的目的
另外C語言的pre-processor有沒有比較好的文件 orz
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.33.126
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1493895124.A.639.html
→
05/04 19:05, , 1F
05/04 19:05, 1F
您的意思是說直接寫這樣就好了嗎
#define MY_SECTION(name) __attribute__((section(.data.james.name)))
我試過一樣無法編譯
話說我搞不太清楚什麼時候要用#或##或不用加orz
→
05/04 19:35, , 2F
05/04 19:35, 2F
→
05/04 19:35, , 3F
05/04 19:35, 3F
→
05/04 20:04, , 4F
05/04 20:04, 4F
推
05/04 20:15, , 5F
05/04 20:15, 5F
→
05/04 20:15, , 6F
05/04 20:15, 6F
對不起我懂了,原來是我的section name沒有加""所以無法編譯
感謝Hazukashiine提供了debug的方式讓我找到問題
test.h
#define MY_SECTION(name) __attribute__((section(".data.james.name")))
test.c
MY_SECTION(foo1) int value;
這樣確定可以用
錯誤訊息是這樣的
xxx.c:3: error: expected ')' before '.' token
xxx.c:3: error: expected identifier or '(' before ')' token
我應該一開始就先寫上來才對orz
※ 編輯: james732 (114.136.33.126), 05/04/2017 20:22:27
推
05/04 20:24, , 7F
05/04 20:24, 7F
→
05/04 20:24, , 8F
05/04 20:24, 8F
→
05/04 20:25, , 9F
05/04 20:25, 9F
→
05/04 20:26, , 10F
05/04 20:26, 10F
→
05/04 20:26, , 11F
05/04 20:26, 11F
→
05/04 20:26, , 12F
05/04 20:26, 12F
用readelf確認一下,確實您所說
最後的正確寫法是這樣的
#define MY_SECTION(name) __attribute__((section(".data.james." #name)))
非常感謝
※ 編輯: james732 (114.136.33.126), 05/04/2017 20:41:37