diff --git "a/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/4.\351\242\204\345\244\204\347\220\206\345\231\250/1.\345\256\217\345\256\232\344\271\211/define_func_3.json" "b/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/4.\351\242\204\345\244\204\347\220\206\345\231\250/1.\345\256\217\345\256\232\344\271\211/define_func_3.json" new file mode 100644 index 0000000000000000000000000000000000000000..518d5b87814dc9f3137fe28a69c44116ffe69e89 --- /dev/null +++ "b/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/4.\351\242\204\345\244\204\347\220\206\345\231\250/1.\345\256\217\345\256\232\344\271\211/define_func_3.json" @@ -0,0 +1,5 @@ +{ + "type": "code_options", + "author": "幻灰龙", + "source": "define_func_3.md" +} diff --git "a/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/4.\351\242\204\345\244\204\347\220\206\345\231\250/1.\345\256\217\345\256\232\344\271\211/define_func_3.md" "b/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/4.\351\242\204\345\244\204\347\220\206\345\231\250/1.\345\256\217\345\256\232\344\271\211/define_func_3.md" new file mode 100644 index 0000000000000000000000000000000000000000..00585804f40939836ea3668bfd1aacd4eac7f56a --- /dev/null +++ "b/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/4.\351\242\204\345\244\204\347\220\206\345\231\250/1.\345\256\217\345\256\232\344\271\211/define_func_3.md" @@ -0,0 +1,62 @@ +# 使用宏定义函数(3) + +当一个宏参数被放进宏体时,这个宏参数会首先被全部展开。定义一个宏,用来打印另外一个宏调用展开后的表达式。例如当调用`printf(MACRO_2_STR( ADD( ADD( 1,000 ), 000 ) ));`时,可以输出展开后的表达式`1+000+000`。 + +下面哪个选项输出`1+000+000`? + +## 答案 + +```c +#include + +#define ADD( x, y ) x+y +#define TO_STR(x) #x +#define MACRO_2_STR( x ) TO_STR( x ) + +int main(int argc, char** args){ + printf(MACRO_2_STR( ADD( ADD( 1,000 ), 000 ) )); + return 0; +} +``` + +## 选项 + +### 选项1 + +```c +#include + +#define ADD( x, y ) x+y +#define MACRO_2_STR( x ) #x + +int main(int argc, char** args){ + printf(MACRO_2_STR( ADD( ADD( 1,000 ), 000 ) )); + return 0; +} +``` + +### 选项2 + +```c +#include + +#define ADD( x, y ) x+y + +int main(int argc, char** args){ + printf("%d",ADD( ADD(1,1000), 000 ) ); + return 0; +} +``` + +### 选项3 + +```c +#include + +#define CONCAT( x, y ) x##y + +int main(int argc, char** args){ + printf("%d",CONCAT( CONCAT(1, 1000), 000 ) ); + return 0; +} +```