|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码如下,当首参数不为0时,输入正常,
但是首参数为0时,输出的打印就看不懂了
- #include "stdio.h"
- #define LINK(A,B,C,D) A##B##C##D
- void main(void){
- printf("\r\n %d, %x", LINK(1,0,2,4), LINK(1,0,2,4));
- printf("\r\n %d, %x", LINK(0,0,1,2), LINK(0,0,1,2));
- printf("\r\n %d, %x", LINK(10,0,1,2), LINK(10,0,1,2));
- }
复制代码
调试输出结果为:
1024, 400
10, a
10012, 271c
这是为什么呢
你可能都没看懂我在说啥
首先第一个输出没有任何问题
- //这里 1 0 2 4 被接在一起然后分别以十进制和十六进制输出到屏幕
- //分别为1024 400
- printf("\r\n %d, %x", LINK(1,0,2,4), LINK(1,0,2,4));
- //这里 0 0 1 2 被连接在一起 (0012) 被计算机识别为8进制数字
- //分别以十进制和十六进制输出到屏幕
- //输出到屏幕分别为 10 a
- printf("\r\n %d, %x", LINK(0,0,1,2), LINK(0,0,1,2));
- //这里 10 0 1 2 被连接在一起 分别以十进制和十六进制输出到屏幕
- //10012 271c
- printf("\r\n %d, %x", LINK(10,0,1,2), LINK(10,0,1,2));
复制代码
第二个,你压根就没明白 ##连接 是直接字面连接 而不是对a b c d内部存的值连接
a b c d被连接成了 abcd 这个符号不是c关键字 也不是任何有意义的符号
你只定义了a变量 b变量 c变量 d变量 并没有定义 abcd 这个名字的变量
懂了?
|
|