C语言中##什么意思,
比如说#defineSHORT_REC_ADR_INIT(a){ad_rec[a].slave_address=SPI_AD_DATA_##a##_BASE;},这是什么...
比如说#define SHORT_REC_ADR_INIT(a) {ad_rec[a].slave_address = SPI_AD_DATA_ ## a ## _BASE;},这是什么意思?
展开
5个回答
展开全部
##在C/C++中具有连接字符串的作用。例如:
执行完A ## B后变为AB(连接A和B并去掉空格)。
下面通过具体实例来说明##的工作原理:
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster(9);
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9,而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
执行完A ## B后变为AB(连接A和B并去掉空格)。
下面通过具体实例来说明##的工作原理:
假设程序中已经定义了这样一个带参数的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同时又定义了一个整形变量:
int token9 = 9;
现在在主程序中以下面的方式调用这个宏:
paster(9);
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9,而#n也被”9”所替代。
可想而知,上面程序运行的结果就是在屏幕上打印出token9=9
展开全部
##用来连接前后两个参数,把它们变成一个字符串。
举例说:
#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;
举例说:
#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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
宏中的#的功能是将其后面的宏参数进行字符串化操作(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
如定义好#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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
算是一个连接符号,表示连接成一个东西
比如你调用SHORT_REC_ADR_INIT(hello)
那么宏展开就是
{ad_rec[a].slave_address = SPI_AD_DATA_hello_BASE;}
ps:貌似你的代码里面多空格了
谢谢采纳
比如你调用SHORT_REC_ADR_INIT(hello)
那么宏展开就是
{ad_rec[a].slave_address = SPI_AD_DATA_hello_BASE;}
ps:貌似你的代码里面多空格了
谢谢采纳
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询