这个疯狂的C宏黑客如何工作?

时间:2010-10-18 17:10:43

标签: c macros

  

可能重复:
  How, exactly, does the double-stringize trick work?

前几天我遇到了this - 有人可以告诉我它是如何运作的吗?

  

一种简单的C字符串化方法   总预处理器常数   符合ANSI C(或任何   C ++编译器。)

     

假设您有一个头文件   包含像#define这样的常量   FIELD1_WIDTH 17.现在要构建   字符串“%17s”,告诉printf   场的宽度。如果你是一个   wimp,你可以使用格式字符串   “%* d”并传入FIELD1_WIDTH作为   第一个参数。但事实并非如此   解决其他问题。你也可以   想要将标识符字符串放入   你的程序给出的值   重要的常量,哪些字符串可以   找。换句话说,你必须是   能够将FIELD1_WIDTH翻译成   “17”。而且因为你会这样做   有一些不变的周围文字,   你想要一个宏来为你做这件事。

     

这很容易,几乎不值得   提。实际上,我撒了谎。它的   无法猜出可怕的黑客   这样做。就这样做:

#define STR(x)   #x
#define XSTR(x)  STR(x) 
     

然后使用XSTR(FIELD1_WIDTH)产生字符串   “17”。 XSTR的特别之处   神秘。

     

提示:STR(FIELD1_WIDTH)扩展为“FIELD1_WIDTH”,即   不是你想要的......

谢谢:)

0 个答案:

没有答案