请高手帮我推荐一本关于讲解宏定义的书,c或c++都行,关键是比较全而细的,,谢谢啦!

cheeny 2010-04-22 05:48:25
发现自己的基础知识还差的很,连下面的语句都看的吃力,两个##符号让我有些迷茫,找了一些资料,发现一般的书中都没有介绍,或是简单的介绍了一下。
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
...全文
323 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hilevel 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yincheng01 的回复:]
《C语言程序设计:现代方法》宏定义讲解的非常详细
[/Quote]
收藏了
yibuyisheng 2010-04-22
  • 打赏
  • 举报
回复
宏定义其实用不着看多少书,就把基础的搞清楚就行了!比如说条件编译、include之类的
cheeny 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yincheng01 的回复:]
《C语言程序设计:现代方法》宏定义讲解的非常详细
[/Quote]
谢谢你,我下来看看!
关于宏定义还是比较复杂的,''#''和''##''的一些应用特例 就已经很繁杂了,我想看看还有没有更复杂的东西。
1、合并匿名变量名
#define ___ANONYMOUS1(type, var, line) type var##line
#define __ANONYMOUS0(type, line) ___ANONYMOUS1(type, _anonymous, line)
#define ANONYMOUS(type) __ANONYMOUS0(type, __LINE__)
例:ANONYMOUS(static int); 即: static int _anonymous70; 70表示该行行号;
第一层:ANONYMOUS(static int); --> __ANONYMOUS0(static int, __LINE__);
第二层: --> ___ANONYMOUS1(static int, _anonymous, 70);
第三层: --> static int _anonymous70;
即每次只能解开当前层的宏,所以__LINE__在第二层才能被解开;

2、填充结构
#define FILL(a) {a, #a}

enum IDD{OPEN, CLOSE};
typedef struct MSG{
IDD id;
const char * msg;
}MSG;

MSG _msg[] = {FILL(OPEN), FILL(CLOSE)};
相当于:
MSG _msg[] = {{OPEN, "OPEN"},
{CLOSE, "CLOSE"}};

3、记录文件名
#define _GET_FILE_NAME(f) #f
#define GET_FILE_NAME(f) _GET_FILE_NAME(f)
static char FILE_NAME[] = GET_FILE_NAME(__FILE__);

4、得到一个数值类型所对应的字符串缓冲大小
#define _TYPE_BUF_SIZE(type) sizeof #type
#define TYPE_BUF_SIZE(type) _TYPE_BUF_SIZE(type)
char buf[TYPE_BUF_SIZE(INT_MAX)];
--> char buf[_TYPE_BUF_SIZE(0x7fffffff)];
--> char buf[sizeof "0x7fffffff"];
这里相当于:
char buf[11];
尹成 2010-04-22
  • 打赏
  • 举报
回复
《C语言程序设计:现代方法》宏定义讲解的非常详细
Eleven 2010-04-22
  • 打赏
  • 举报
回复
两个##就是连字符,比如
RUNTIME_CLASS(CView)
((CRuntimeClass*)(&CView::classCView))

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧