C语言宏定义意思?

#define assert(exp) if (exp);\
exse assertion_failure(#exp, _FILE_, _BASE_FILE_, _LINE_)

我继续回答你的追问:
这个 if 由于后面紧跟了;所以什么也不会做,只是把exp执行了一遍,而后面的exse我觉得可能是笔误,应该是else,那么这个宏的意思其实就是,当exp结果为非0(即false)时,那么执行assertion_failure,后面的参数#exp,诚如前面的解答是exp的字符化,而_FILE_ _BASE_FILE_ _LINE_也都是宏,是在c或c++基本库文件中定义好的,分别当前文件名,主程序文件名和该行代码的行数

最后友情提醒下,宏定义尤其是涉及逻辑代码的,最好放在do{ }while(0)里面,这样可以保证其在大多数条件下都可以正常的执行追问

确实是我笔误,谢谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-20
  宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
  宏定义又称为宏代换、宏替换,简称"宏"。
  格式:
  #define 标识符 字符串
  其中的标识符就是所谓的符号常量,也称为"宏名"。
  预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
  掌握"宏"概念的关键是"换"。一切以换为前提、做任何事情之前先要换,准确理解之前就要"换"。
  即在对相关命令或语句的含义和功能作具体分析之前就要换。
第2个回答  2013-09-16
行末的反斜杠,表示续行符,也就是说下一行于本行应连成一行阅读。
这句定义 后面语句中 所有的
assert(exp)

if (exp);
exse assertion_failure(#exp, _FILE_, _BASE_FILE_, _LINE_)
替代。
其中 exp 是 表达式。
#exp 是 “字符串化” 的 exp. ( 例如,当 exp 是 xyz 时,#exp 是 "xyz").追问

if (exp);
exse assertion_failure(#exp, _FILE_, _BASE_FILE_, _LINE_)
这个IF怎么执行!

追答

if (); 多写了分号。去了分号即可。

追问

书上有这个分号。

追答

那就是 exse 没有定义 成 else.

相似回答