rocky1972
请教高手一个预编译问题,谢谢
下面这个文件根据不同的配置定义了ARCH_NUM, 文件很长,现在我想在预编译的时候知道整个代码到底用的哪个ARCH_NUM ,也就是说在编译的时候把这个ARCH_NUM打印出来,请教一下这个如何做到?
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color]linux[color=#0000CC].[/color]h[color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color][color=#0000CC]-[/color]
[color=#0000CC]#[/color][color=#0000FF]if[/color] defined ACCELENT_SA
[color=#0000CC]#[/color] [color=#FF0000]define[/color] ARCH_NUMBER [color=#0000CC]([/color]22[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]elif[/color] defined PXA_IDP
[color=#0000CC]#[/color] [color=#FF0000]define[/color] ARCH_NUMBER [color=#0000CC]([/color]110[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]elif[/color] defined ASSABET
[color=#0000CC]#[/color] [color=#FF0000]define[/color] ARCH_NUMBER [color=#0000CC]([/color]25[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#0000FF]else[/color]
[color=#0000CC]#[/color]warning [color=#FF00FF]"FIXME: Calling the kernel with a generic SA1100 architecture code. YMMV!"[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] ARCH_NUMBER [color=#0000CC]([/color]18[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]endif[/color][/color][/font][/td][/tr][/table]
rocky1972
[quote]原帖由 [i]flw[/i] 于 2008-6-19 12:43 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8619508&ptid=1164535][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
#warning 不就是干这个使的嘛。 [/quote]
我用 #error ARCH_NUM "rocky1972"
但是打印出来就是 ARCH_NUM rocky1972
没把ARCH_NUM实际对应的值打出来,请问一下怎么引用ARCH_NUM对应的值,谢谢!
leojay
没想到用c有什么办法,不过用c++就容易了:
1
2 #define ARCH 15
3
4 template<int n>
5 void testmethod()
6 {
7 int k[n>0?-n:n];
8 }
9
10 int main()
11 {
12 testmethod<ARCH>();
13 }
编译的时候就会说:
a.cpp: In function `void testmethod() [with int n = 15]':
a.cpp:12: instantiated from here
a.cpp:7: error: creating array with size zero (`-0x00000000f')
rocky1972
[quote]原帖由 [i]net_robber[/i] 于 2008-6-19 14:43 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8620525&ptid=1164535][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
在不同的define后面warnning不同的内容,根据编译时 实际显示的内容判断真正起作用的行
flw已经回答过你的问题了 [/quote]
[quote]原帖由 [i]rocky1972[/i] 于 2008-6-19 13:22 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8619828&ptid=1164535][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
我用 #error ARCH_NUM "rocky1972"
但是打印出来就是 ARCH_NUM rocky1972
没把ARCH_NUM实际对应的值打出来,请问一下怎么引用ARCH_NUM对应的值,谢谢! [/quote]
rocky1972
[quote]原帖由 [i]77h2_eleven[/i] 于 2008-6-19 17:33 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8622112&ptid=1164535][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
直接这个语句
int main(void)
{
printf("%d/n", 1*ARCH_NUMBER);
}
不就行了么。
PS:LZ也够挑剔的,大家如此出谋划策,你还觉得不是最好的。 [/quote]
原因:
这部分代码是bootloader中的一部分,其中没有printf;另外串口由于硬件原因也不能用,所以只能在预编译的时候想办法如何把宏定义的值在终端打印出来。
flw版主说的message,还有error这样的方法我都试过。
#error ARCH_NUMBER
这样打印出来就是“ARCH_NUMBER” 这个字符串,实际的值没有打印出来。
小弟不懂的就是如何把ARCH_NUMBER对应的用error打出来!
冒犯之处,望个路高手多多包涵,小弟再这先向楼上的关注的诸位兄弟们道谢了:)