// gcc -E -P test.c // Print 0 to N // 0 // 1 // 2 // ... // N #define N 4 #if __COUNTER__ <= (N*2) // ending condition #if 1 /* Version 1 */ ((__COUNTER__-1)/2) /* 运行结果:(还差点意思) ((1 -1)/2) ((3 -1)/2) ((5 -1)/2) ((7 -1)/2) ((9 -1)/2) */ #else /* Version 2 (+常量表达式转十进制字符串) */ /* 建立脚本输入值与 __COUNTER__ 之间的引用关系*/ #define MFUNC_IN_U8_DEC_VALUE ((__COUNTER__-1)/2) /* 调用常量表达式转字符串数值转换脚本 ! MFUNC_IN_U8_DEC_VALUE是__COUNTER__的引用,转换脚步中会被替换为调用__COUNTER__ TODO: 如何解决这个问题 ??? */ #include "mf_u8_dec2str.h" MFUNC_OUT_DEC_STR #endif #include "test.c" // recursive include #endif