第1个回答 推荐于2017-09-21
##用来连接前后两个参数,把它们变成一个字符串。
举例说:
#define Conn(x,y) x##y
int n = Conn(123,456); 结果就是n=123456;
char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";
你给出的宏
SHORT_REC_ADR_INIT(6)相当于{ad_rec[6].slave_address = SPI_AD_DATA_6_BASE;本回答被提问者采纳
第2个回答 2014-02-14
宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。
如定义好#define STRING(x) #x之后,下面二条语句就等价。
char *pChar = "hello";
char *pChar = STRING(hello);
##它可以拼接符号(Token-pasting operator),如:
#define paster( n ) printf( "token"#n" = %d\n", token##n )
int token9 = 100;
再调用 paster(9);宏展开后token##n直接合并变成了token9。
整个语句变成了
printf( "token""9"" = %d", token9 );
在C语言中字符串中的二个相连的双引号会被自动忽略,于是上句等同于
printf("token9 = %d", token9);。
即输出token9 = 100
第3个回答 2014-02-14
算是一个连接符号,表示连接成一个东西
比如你调用SHORT_REC_ADR_INIT(hello)
那么宏展开就是
{ad_rec[a].slave_address = SPI_AD_DATA_hello_BASE;}
ps:貌似你的代码里面多空格了
谢谢采纳本回答被网友采纳