From 2e6e4ce627e95ee6efdd95bdf326c99def177811 Mon Sep 17 00:00:00 2001 From: feilong Date: Fri, 22 Oct 2021 18:04:32 +0800 Subject: [PATCH] add macro --- .../config.json" | 7 ++- .../define_constant.json" | 5 ++ .../define_constant.md" | 63 +++++++++++++++++++ .../define_func3.json" | 5 ++ .../define_func3.md" | 62 ++++++++++++++++++ .../define_func_1.json" | 5 ++ .../define_func_1.md" | 61 ++++++++++++++++++ .../define_func_2.json" | 5 ++ .../define_func_2.md" | 62 ++++++++++++++++++ 9 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 "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_constant.json" create mode 100644 "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_constant.md" create mode 100644 "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_func3.json" create mode 100644 "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_func3.md" create mode 100644 "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_1.json" create mode 100644 "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_1.md" create mode 100644 "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_2.json" create mode 100644 "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_2.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/config.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/config.json" index 1def284..56ffce1 100644 --- "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/config.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/config.json" @@ -6,5 +6,10 @@ "C语言" ], "children": [], - "export": [] + "export": [ + "define_constant.json", + "define_func_1.json", + "define_func_2.json", + "define_func_3.json" + ] } \ No newline at end of file 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_constant.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_constant.json" new file mode 100644 index 0000000..6bb2d6a --- /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_constant.json" @@ -0,0 +1,5 @@ +{ + "type": "code_options", + "author": "幻灰龙", + "source": "define_constant.md" +} \ No newline at end of file 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_constant.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_constant.md" new file mode 100644 index 0000000..d82f5fb --- /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_constant.md" @@ -0,0 +1,63 @@ +# 使用宏定义常量 + +使用宏定义常量定义字符串,输出"Hello,World!",下面错误的选项是: + +## 答案 + +```c +#include + +#define HELLO "Hello," +#define WORLD "World!" +#define HELLO_WORLD HELLO##WORLD + +int main(int argc, char** args){ + printf(HELLO_WORLD); + return 0; +} +``` + +## 选项 + +### 直接定义宏字符串常量 + +```c +#include + +#define HELLO_WORLD "Hello,World!" + +int main(int argc, char** args){ + printf(HELLO_WORLD); + return 0; +} + +``` + +### 两个字符串常量组合 + +```c +#include + +#define HELLO "Hello," +#define WORLD "World!" + +int main(int argc, char** args){ + printf(HELLO WORLD); + return 0; +} +``` + +### 宏直接拼接 + +```c +#include + +#define HELLO "Hello," +#define WORLD "World!" +#define HELLOWORLD HELLO WORLD + +int main(int argc, char** args){ + printf(HELLOWORLD); + return 0; +} +``` \ No newline at end of file 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_func3.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_func3.json" new file mode 100644 index 0000000..098da28 --- /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_func3.json" @@ -0,0 +1,5 @@ +{ + "type": "code_options", + "author": "幻灰龙", + "source": "define_fun_3.md" +} \ No newline at end of file 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_func3.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_func3.md" new file mode 100644 index 0000000..e6b05ed --- /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_func3.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; +} +``` \ No newline at end of file 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_1.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_1.json" new file mode 100644 index 0000000..ba350e8 --- /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_1.json" @@ -0,0 +1,5 @@ +{ + "type": "code_options", + "author": "幻灰龙", + "source": "define_fun_1.md" +} \ No newline at end of file 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_1.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_1.md" new file mode 100644 index 0000000..3194f83 --- /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_1.md" @@ -0,0 +1,61 @@ +# 使用宏定义函数(1) + +定义一个宏函数,将符号转成字符串,下面代码正确的选项是? + +## 答案 + +```c +#include + +#define TO_STR(s) #s + +int main(int argc, char** args){ + printf(TO_STR(1000)); + printf(TO_STR(HelloWorld!)); + return 0; +} +``` + +## 选项 + +### 错误实现 + +```c +#include + +#define TO_STR(s) "s" + +int main(int argc, char** args){ + printf(TO_STR(1000)); + printf(TO_STR(HelloWorld!)); + return 0; +} +``` + +### 错误调用 + +```c +#include + +#define TO_STR(s) #s + +int main(int argc, char** args){ + printf(TO_STR(1000)); + printf(TO_STR(Hello,World!)); + return 0; +} +``` + +### 凑巧 + +```c +#include + +#define TO_STR(s) ##s + +int main(int argc, char** args){ + printf(TO_STR(1000)); + printf(TO_STR(HelloWorld!)); + return 0; +} +``` \ No newline at end of file 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_2.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_2.json" new file mode 100644 index 0000000..0f95d90 --- /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_2.json" @@ -0,0 +1,5 @@ +{ + "type": "code_options", + "author": "幻灰龙", + "source": "define_fun_2.md" +} \ No newline at end of file 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_2.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_2.md" new file mode 100644 index 0000000..66e7ead --- /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_2.md" @@ -0,0 +1,62 @@ +# 使用宏定义函数(2) + +定义一个拼接符号的宏,例如 +* 使用 `CONCAT(1,000)` 拼接获得`1000` +* 使用 `CONCAT(1,00)` 拼接获得`100` + +下面代码正确的选项是? + +## 答案 + +```c + +#include + +#define CONCAT(x,y) x##y + +int main(int argc, char** args){ + printf("%d", CONCAT(1,000)); + return 0; +} +``` + +## 选项 + +### 一个井号 + +```c +#include + +#define CONCAT(x,y) x#y + +int main(int argc, char** args){ + printf("%d", CONCAT(1,000)); + return 0; +} +``` + +### 加法 + +```c +#include + +#define CONCAT(x,y) x+y + +int main(int argc, char** args){ + printf("%d", CONCAT("1","000")); + return 0; +} +``` + +### 凑巧 + +```c +#include + +#define CONCAT(x,y) x*1000+y + +int main(int argc, char** args){ + printf("%d", CONCAT(1,000)); + return 0; +} +``` \ No newline at end of file -- GitLab