[問題] macro定義問題 (已解決)

看板C_and_CPP作者 (好人超)時間7年前 (2017/05/04 18:52), 7年前編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/1
開發平台(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
## 是 string concatenation 這裡應該不需要
05/04 19:05, 1F
您的意思是說直接寫這樣就好了嗎 #define MY_SECTION(name) __attribute__((section(.data.james.name))) 我試過一樣無法編譯 話說我搞不太清楚什麼時候要用#或##或不用加orz

05/04 19:35, , 2F
可以考慮define .data.jame, 再包一層把這個define傳入
05/04 19:35, 2F

05/04 19:35, , 3F
,傳入後##
05/04 19:35, 3F

05/04 20:04, , 4F

05/04 20:15, , 5F
提一件事, 無法編譯有很多種, 貼個錯誤訊息上來吧
05/04 20:15, 5F

05/04 20:15, , 6F
說不定根本就不是 preprocessor 沒弄好而是其他問題
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
你那樣出來的東西可能會在 ".data.james.name"
05/04 20:24, 8F

05/04 20:25, , 9F
用個 objdump 確定一下東西對不對吧
05/04 20:25, 9F

05/04 20:26, , 10F
如果確實需要的話, 寫法是 section(".data.james." #name)
05/04 20:26, 10F

05/04 20:26, , 11F
我剛剛發現它編譯過就很開心的以為解決了XD
05/04 20:26, 11F

05/04 20:26, , 12F
preprocessor 會取代成 section(".data.james." "foo1")
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
文章代碼(AID): #1P2mVKOv (C_and_CPP)