摘要: 简单的宏定义有如下格式:[#define指令(简单的宏)] #define 标识符替换列表替换列表是一系列的C语言记号,包括标识符、关键字、数、字符常量、字符串字面量、运算符和标点符号。当预处理器遇到一个宏定义时,会做一个 “标识符”代表“替换列表”的记录。在文件后面的内容中,不管标识符在任何位置出现,预处理器都会用替换列表代替它。不要在宏定义中放置任何额外的符号,否则它们会被作为替换列表的一部分。一种常见的错误是在宏定义中使用 = :[cpp] view plaincopyprint?#define N = 100 /*** WRONG ***/ int a[N]; /* 会成为 int . 阅读全文
posted @ 2014-03-20 22:18 李富清 阅读(288) 评论(0) 推荐(0)
摘要: 函数调用机制:首先我们看下源代码:将a赋值为5,b赋值为3可以看到我已经在调用函数那一行设置了断点然后我们F5开始调试查看函数调用流程:现在我们F11进入函数:然后取x地址0x0012feec看下传参情况:可以看到x和y的值已经压入栈中传参顺序是从右往左依次入栈,所以y值在下,x值在上然后我们继续单步走:可以看到将参数压入栈中后紧跟着保存了返回地址,为什么保存返回地址?这00401053是谁的地址?当函数结束后为什么可以知道调用方的下一条指令呢?因为发生函数调用时函数会把下一句指令的地址保存起来当函数结束后就会返回到这个地址上继续执行调用方的代码这个指令就是代码中main函数的return语句 阅读全文
posted @ 2014-03-20 19:54 李富清 阅读(1620) 评论(0) 推荐(0)