The C programming language K&R 书中有这么一段话: Nonetheless, macros are valuable. One practical example comes from <stdio.h> , in which 我的拙见理解是这样的: 因为函数调用涉及到返回地址压栈,ebp保存等等开销,所以直接将其定义成宏,然后预处理的时候将其展开,这样每次 我比较笨,所以,就以为是这样意思的,然后我就下载了glibc,找到了stdio.h以及getchar.c中的函数定义,但是没有发现什么宏之类的东西,不知道我哪里想错了,求大神指导? stdio.h: extern int getchar (void); getchar.c: |
|
1分 |
不是所有的函数都会定义成宏
|
1分 |
谁说getchar一定要定义为宏?
|
这个我肯定知道,我的意思是为啥K&R说的 和我查看源码不一样 |
|
我的意思是为啥K&R说的 和我查看源码不一样 |
|
2分 |
C标准只规定了函数接口,没有规定实现,具体实现得靠各大平台,不一样正常 |
1分 |
人家说也只是说通常,并没说一定,C语言的实现有很多版本,glibc只是其中之一 |
4分 |
“函数调用的开销”主要是指函数调用前将函数参数、返回地址压栈,函数调用完从栈中取出返回地址并跳到该地址继续执行使用的若干条汇编指令。
|
8分 |
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告: VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 |
请问楼主,同样的语句是用过程的速度快,还是用函数的速度快呢?
|
|
比较弱,,,,,,过程调用和函数调用的区别是? |
|
赵老师, |
|
2分 |
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 |
谢谢您的耐心指导 谢谢 |
|
K&R是在八十年代写着的,被称为“圣经”。但科学技术领域里,没有一成不变的东西,不能将他们说过的认为成永远正确、后人必须严格遵守照办的“圣旨”
|
|
1分 |
崇敬先贤,但不要迷信,更不要神圣化
|