C/C++ 语言 printf 可以直接使用宏定义打印?
Posted 编码小二的赵小二
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 语言 printf 可以直接使用宏定义打印?相关的知识,希望对你有一定的参考价值。
hello ,你好呀,我是小二。
在 编码 过程中,小二发现一种神奇的用法:打印时,直接使用宏定义!
于是小二决定自己尝试一把。
1 基础环境
使用的在线编译器是这个👉👉👉:Coliru (stacked-crooked.com)
在线编译器,使用的 C++ ,默认编译选项是这个样子:
g++ -std=c++20 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
然后又在本地,使用 VSCode 做了测试,编译选项是这个样子:
gcc 'main.c' -o 'main.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK ; if ($?) &'./main.exe'
本地 VSCode 搭建 C/C++ 编译环境,可以参考这篇文章👉:简要记录丨VSCode 搭建基础 C/C++ 编译环境
2 ONE
本次测试,使用的 C++ 语言,在线编译运行。
测试 Demo 如下:
#include <iostream>
#include <string>
#include <vector>
#define HELLO "Hello world"
template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec)
for (auto& el : vec)
os << el << ' ';
return os;
int main()
std::vector<std::string> vec =
"Hello", "from", "GCC", __VERSION__, "!"
;
std::cout << vec << std::endl;
printf("zhaochen "HELLO" \\n");
运行结果如下,可以看到,仅仅是有警告,但还是运行出结果了。
main.cpp:24:12: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
24 | printf("zhaochen "HELLO" \\n");
| ^
Hello from GCC 11.2.0 !
zhaochen Hello world
再次查看报警信息,小二理解大概意思就是,C++11 要求宏定义与文字字符串之间,必须要有一个空格。
warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
第一次运行结果,截图如下:
3 TWO
基于第一次测试结果,同样使用 C++ ,在线编译。
本次测试 demo ,修复之前的警告,加上一个空格,再试试看
#include <iostream>
#include <string>
#include <vector>
#define HELLO "Hello world"
template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec)
for (auto& el : vec)
os << el << ' ';
return os;
int main()
std::vector<std::string> vec =
"Hello", "from", "GCC", __VERSION__, "!"
;
std::cout << vec << std::endl;
printf("zhaochen " HELLO" \\n");
哇偶🧡,运行结果不出所料,成功了,本次运行,也没有告警信息!
Hello from GCC 11.2.0 !
zhaochen Hello world
来看看测试的截图:
4 THREE
第三次,小二决定在自己的电脑上,使用 VSCode + C 语言,本地测试,测试代码如下:
#include <stdio.h>
#define TEST_ZHAOCHEN "编码小二"
int main()
printf("start print...\\n");
printf("my name is "TEST_ZHAOCHEN"\\n");
printf("end print...\\n");
运行结果如下:
PS E:\\22-Programming\\11-VsCodeC\\1-test\\01-2021.09.01-printf宏定义打印> gcc 'main.c' -o 'main.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK ; if ($?) &'./main.exe'
start print...
my name is 编码小二
end print...
PS E:\\22-Programming\\11-VsCodeC\\1-test\\01-2021.09.01-printf宏定义打印>
测试截图如下:
5 总结
到这里,小二进行了三次不同的尝试,有必要做一下总结。
1、C++11 对使用宏定义的打印,要求文本字符串与宏定义之间必须要有一个空格。
2、使用 C 语言(C11),可以直接打印出来,而不会产生警告。
小二思考了一下,这样使用的好处:
1、方便替换名字或者打印的信息。通过宏定义修改一次,即可全局修改。
2、相当于可以动态修改,如果写入固定数值,那就写死了。
好了,小二本期的文章就到这里,一起加油✌✌✌,祝一切顺利!
以上是关于C/C++ 语言 printf 可以直接使用宏定义打印?的主要内容,如果未能解决你的问题,请参考以下文章