C语言取消宏定义

C语言取消宏定义undef这个取消宏定义书上讲的不是很清楚。为什么答案是执行了#else那个语句?具体原因我也测试过了,是undef取消了宏定义。但我的理解是根据代码顺序来不是应该调用子函数执行完f()子函数再取消宏的嘛。还有我把子函数放在主函数前面的话执行是#if definded那个语句。难道宏是先看到再?????

宏定义属于预编译阶段的处理过程。预编译是整个编译过程的第一步。编译器将检查代码中的所有预编译语句,遇到#include则将被包含的文件整个复制粘贴到#include位置替换#include语句,遇到#define语句则定义该宏并将文本中所有出现该宏的代码予以替换,遇到#ifdef、#ifndef、#endif语句则进行判断和执行相应操作。这个时候程序的源代码还是文本形式,编译器还没有开始语法分析,连函数的概念都不存在,又怎么判断函数的代码谁先执行谁后执行呢?追问

那他这个是怎么判断前后执行顺序的

追答

你问的是什么的执行顺序?宏指令的执行顺序就是它们在文本中的出现顺序。

追问

就问我发的代码这道题的

追答

宏指令的执行顺序就是它们在文本中的出现顺序。

追问

这个代码宏指令的执行顺序。按宏出现的顺序嘛

追答

宏指令的执行顺序就是它们在文本中的出现顺序。这句话很难理解吗?

追问

明白,运行宏时,按照从上至下的顺序依次执行每个宏命令吧?

温馨提示:答案为网友推荐,仅供参考
相似回答