社区
C语言
帖子详情
C语言中##表示什么意思?
shellfish567
2010-01-13 11:56:17
例如:
#define con_lo(x,y) x##yy
#if defined(ARRAYS)
#define locals(x,y) x[8],y[8]
#else
#define locals(x,y) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7,\
y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7
#end if
#可以用来连接字符串,##就不知道了……望指点下哈,立即给分
...全文
9465
5
打赏
收藏
C语言中##表示什么意思?
例如: #define con_lo(x,y) x##yy #if defined(ARRAYS) #define locals(x,y) x[8],y[8] #else #define locals(x,y) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7,\ y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7 #end if #可以用来连接字符串,##就不知道了……望指点下哈,立即给分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shanleichicheng
2010-12-08
打赏
举报
回复
Thanks!!!
shellfish567
2010-01-13
打赏
举报
回复
谢谢哈~。~版主你分多就不给了哈,给一楼了~。~
swl82560397pq
2010-01-13
打赏
举报
回复
mark
猫已经找不回了
2010-01-13
打赏
举报
回复
5
http://blog.csdn.net/hairetz/archive/2009/11/08/4785047.aspx
以前转过一篇,好好看下,蛮有用的。
1. 宏可以像函数一样被定义,例如:
#define min(x,y) (x 但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。
2. 如果宏需要参数,你可以不传,编译器会给你警告(宏参数不够),但是这会导致错误。如C++书籍中所描
述的,编译器(预处理器)对宏的语法检查不够,所以更多的检查性工作得你自己来做。
3. 很多程序员不知道的#和##
#符号把一个符号直接转换为字符串,例如:
#define STRING(x) #x
const char *str = STRING( test_string ); str的内容就是"test_string",也就是说#会把其后的符号
直接加上双引号。
##符号会连接两个符号,从而产生新的符号(词法层次),例如:
#define SIGN( x ) INT_##x
int SIGN( 1 ); 宏被展开后将成为:int INT_1;
4. 变参宏,这个比较酷,它使得你可以定义类似的宏:
#define LOG( format, ... ) printf( format, __VA_ARGS__ )
LOG( "%s %d", str, count );
__VA_ARGS__是系统预定义宏,被自动替换为参数列表。
5. 当一个宏自己调用自己时,会发生什么?例如:
#define TEST( x ) ( x + TEST( x ) )
TEST( 1 ); 会发生什么?为了防止无限制递归展开,语法规定,当一个宏遇到自己时,就停止展开,也就是
说,当对TEST( 1 )进行展开时,展开过程中又发现了一个TEST,那么就将这个TEST当作一般的符号。TEST(1)
最终被展开为:1 + TEST( 1) 。
liao05050075
2010-01-13
打赏
举报
回复
1
#define中的 #与##
#define GPEBLT_FUNCNAME(basename) (SCODE (GPE::*)(struct GPEBltParms *))&GPE::##basename
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。
#include <stdio.h>
#define paster( n ) printf( "token " #n" = %d\n ", token##n )
int main()
{
int token9=10;
paster(9);
return 0;
}
输出为
[leshy@leshy src]$ ./a.out
token 9 = 10
http://baike.baidu.com/view/1611565.htm
C语言
中
的#和##
表示
的意义
本文深入探讨了
C语言
中
预处理器指令#和##的作用。#用于将宏参数转换为字符串,而##则用于连接两个宏参数。通过示例代码展示了如何使用这两个指令,并解释了它们在实际编程
中
的应用。
c 宏
中
# ## @ 分别
表示
什么意思
本文详细解释了
C语言
宏定义
中
的#(字符串化操作符)和##(连接符)的作用及用法示例,并澄清了@符号在标准C/C++宏定义
中
并无特殊含义。
详解
C语言
中
# 和 ## 的用法
本文详细介绍了
C语言
中
预处理宏的功能与应用,包括如何使用#将宏参数转化为字符串,利用##连接宏参数,以及这些功能在实际编程
中
的具体案例。通过具体的代码示例展示了宏在合并匿名变量名、填充结构体成员、记录文件名等方面的应用。
C语言
宏定义
中
,“#”符和“##”符的作用含义
本文介绍了
C语言
宏定义
中
#和##符号的作用。#用于将变量转换为字符串并用双引号括起;##用于连接两个子串形成新的子串,避免了空格导致的额外分隔。
C语言
的“##“用法以及意义
文章介绍了
C语言
中
##运算符的普通用法,即连接宏参数,以及它的特殊用法,特别是在可变参数宏
中
的作用。通过示例展示了如何利用##和逗号表达式创建灵活的宏接口,提供默认参数或在用户未指定时填充默认值。这些技巧对于简化API和提高代码的灵活性很有帮助。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章