在C编程中,宏从不做类型检查吗?那么,为0x01和0x01u定义宏有什么区别?

在C编程中,宏从不做类型检查吗?那么,为0x01和0x01u定义宏有什么区别?,c,macros,C,Macros,他们说c中的宏从不检查数据类型,它只是将左侧替换为右侧。那么为什么人们明确地定义0x01u,他们可以简单地说是0x01呢?它定义了一个无符号整数文本。您还可以看到他们使用0x…UL将十六进制文字定义为无符号长整数的地方 如果您想知道它们产生的位模式,只需将十进制文字转换为等效的十六进制或二进制文字1U分别以十六进制和二进制形式变为0x01U和01b1 另一种更常见的文字使用f后缀,即单精度浮点文字,如1.0f 一,。仅供说明;不是符合C标准的实际有效二进制文本。C++14支持二进制文本的0b01

他们说c中的宏从不检查数据类型,它只是将左侧替换为右侧。那么为什么人们明确地定义0x01u,他们可以简单地说是0x01呢?

它定义了一个
无符号
整数文本。您还可以看到他们使用
0x…UL
将十六进制文字定义为
无符号长
整数的地方

如果您想知道它们产生的位模式,只需将十进制文字转换为等效的十六进制或二进制文字
1U
分别以十六进制和二进制形式变为
0x01U
01b
1

另一种更常见的文字使用f后缀,即单精度浮点文字,如
1.0f


一,。仅供说明;不是符合C标准的实际有效二进制文本。C++14支持二进制文本的
0b01
(也很有趣,像
0b0000'0001
,将
'
作为分组字符)。

在使用宏的地方将进行检查–Bernd Elkemann


宏(预处理器)不进行类型检查;当使用扩展宏的结果时,编译器会执行此操作Jonathan Leffler

在使用宏的地方将进行检查宏(预处理器)不进行类型检查;当使用扩展宏的结果时,编译器会执行此操作。“…宏从不执行类型检查”-这可能意味着不止一件事。澄清一下,你具体在问什么。谢谢,伯纳德·埃尔克曼和乔纳森·莱夫勒。我明白你的意思,所以在代码中,当我的宏被0x01u替换时,它将被视为无符号int,而对于0x01,它只是被视为有符号int。这个问题并不太糟糕。Bernds&Jonathans的评论将是一个很好的答案。请再次阅读该问题,您的答案似乎无助于解决问题OP@Rakesh_K我想他是在问U符号的目的是什么。所以我删除了我的帖子。谢谢你通知我。