c - C 中使用 printf 打印宏变量

标签 c macros

你能用%u打印宏吗?

#define MAX 10
printf("%u", MAX);

这样做并期望获得 10 分是否合法?

最佳答案

不存在“宏变量”这样的东西。宏扩展发生在编译过程的早期,在存在任何真正的“变量”甚至类型概念之前。这是文本替换。

您的代码完全等同于

printf("%u", 10);

将打印10

有一个轻微的并发症。常量10 的类型为int,而%u 格式需要unsigned int 类型的参数。使用 %d 而不是 %u 更有意义。但与有符号和无符号类型(例如 int 和 unsigned int )相对应的值作为函数参数几乎可以互换,只要该值在两者的范围内即可。 (printf("%u", -10) 可能有问题。)

关于c - C 中使用 printf 打印宏变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45872643/

相关文章:

c - _带有 void* 指针的通用宏不接受双参数?

c++ - 为什么 va_start 会失败?

c++ - 将大型 char8 c 数组转换为 short16 的最快方法是什么?

c - GtkFileChooserDialog gtk_file_chooser_get_filename() 返回 null,即使输入了文件名?

c - 在C编程中通过比较或其他方式根据结构体数组找到最小数量

c++ - 当宏用作变量名时,有什么方法可以跳过宏替换(在预处理期间)?

c++ Variadic Macro编译错误

c - Makefile 问题 - 无法理解问题出在哪里

c - C 中 sizeof() 的这两种用法有什么区别?

c++ - 嵌套 i, j 循环的宏