[问题] macro定义问题 (已解决)

楼主: james732 (好人超)   2017-05-04 18:52:01
开发平台(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
作者: Hazukashiine (私は幸せです)   2017-05-04 19:05:00
## 是 string concatenation 这里应该不需要
作者: pttworld (批踢踢世界)   2017-05-04 19:35:00
可以考虑define .data.jame, 再包一层把这个define传入,传入后##
作者: Hazukashiine (私は幸せです)   2017-05-04 20:04:00
作者: LPH66 (-6.2598534e+18f)   2017-05-04 20:15:00
提一件事, 无法编译有很多种, 贴个错误讯息上来吧说不定根本就不是 preprocessor 没弄好而是其他问题等等, 要加引号的话那可能需要字串化的 #你那样出来的东西可能会在 ".data.james.name"用个 objdump 确定一下东西对不对吧如果确实需要的话, 写法是 section(".data.james." #name)
楼主: james732 (好人超)   2017-05-04 20:26:00
我刚刚发现它编译过就很开心的以为解决了XD
作者: LPH66 (-6.2598534e+18f)   2017-05-04 20:26:00
preprocessor 会取代成 section(".data.james." "foo1")

Links booklink

Contact Us: admin [ a t ] ucptt.com