|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 这个名字的变量
懂了?
|
|