开发者

One-liner for printing out the value of a macro from a header

I have a header that defines a large number of macros, some of whom depend on other macros -- however, the dependencies are all resolved within this header.

I need a one-liner for printing out the value of a macro defined in that header.

As an example:

#define MACRO_A 0x60000000
#define MACRO_B MACRO_A + 0x00010000
//...

As a first blush:

echo MACRO_B | ${CPREPROCESSOR} --include /path/to/header

... which nearly gi开发者_StackOverflow中文版ves me what I want:

# A number of lines that are not important
# ...
0x60000000 + 0x00010000

... however, I'm trying to keep this from ballooning into a huge sequence of "pipe it to this, then pipe it to that ...".

I've also tried this:

echo 'main(){ printf( "0x%X", MACRO_B ); }' \
  | ${CPREPROCESSOR} --include /path/to/header --include /usr/include/stdio.h

... but it (the gcc compiler) complains that -E is required when processing code on standard input, so I end up having to write out to a temporary file to compile/run this.

Is there a better way?

-Brian


echo 'void main(){ printf( "0x%X", MACRO_B ); }' \
  | gcc -x c --include /path/to/header --include /usr/include/stdio.h - && ./a.out

will do it in one line.

(You misread the error GCC gives when reading from stdin. You need -E or -x (needed to specify what language is expected))

Also, it's int main(), or, when you don't care like here, just drop the return type entirely. And you don't need to specify the path for stdio.h.

So slightly shorter:

echo 'main(){printf("0x%X",MACRO_B);}' \
  | gcc -xc --include /path/to/header --include stdio.h - && ./a.out


What about tail -n1? Like this:

$ echo C_IRUSR | cpp --include /usr/include/cpio.h | tail -n 1
000400


How about artificially generating an error that contains your MACRO_B value in it, and then compiling the code?


I think the easiest way would be to write a small C program, include the header to that, and print the desired output. Then you can use it in your script, makefile or whatever.


echo '"EOF" EOF' | cpp --include /usr/include/stdio.h | grep EOF

prints:

"EOF" (-1)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜