>第 21 章 预处理>其它预处理特性

darknever uyucn@163.com
2009-03-18 22:21:54

请问:

#define assert(test)	((test) ? (void)0 \
		: _Assert(__FILE__ ":" _STR(__LINE__) " " #test))


曾宇 uyucn@163.com
2009-03-18 22:25:09

请问:

在本章中代码:

#define assert(test)	((test) ? (void)0 \
		: _Assert(__FILE__ ":" _STR(__LINE__) " "#test))


为什么#test是字符串"assert(is_sorted())"而不是字符串"is_sorted()"?


希望不吝赐教,谢谢!


宋劲杉 songjinshan@akaedu.org
2009-03-19 13:22:09

不好意思,是我的笔误,已经改过来了,谢谢指出!


Alex activekitten@gmail.com
2009-04-03 15:30:32

本章中有段:
最后_Assert调用的形式是_Assert("main.c" ":" "33" " " "is_sorted()"),传给_Assert函数的字符串是"main.c:33 is_sorted()"。

我想请教下这中间的双引号去哪里了?谢谢指教!


宋劲杉 songjinshan@akaedu.org
2009-04-05 10:09:58

中间的" "引起一个空格,空格确实被保留了。


orange juicerococo@hotmail.com http://learn.akae.cn/media/ch21s04.html
2009-04-08 15:38:11

在_Assert函数的定义文件中, #include <assert.h> 是没有必要的!


宋劲杉 songjinshan@akaedu.org
2009-04-09 13:01:09

您说得很对,多谢指出!


姚磊 yaolei135@gmail.com
2009-07-24 23:38:09

不明白为什么在assert.h不直接定义为:
	#define _STR(x) #x
而是要迂回一番:
	#define _STR(x) _VAL(x)
	#define _VAL(x) #x
,这两者有什么区别吗?或是后者有什么特别的用途?


宋劲杉 songjinshan@akaedu.org
2009-07-25 15:33:23

宏展开的过程下边已经有详细解释。至于这个问题应该留给你自己去思考。


laciqs 530107999@qq.com
2010-04-12 22:48:56

说一个语文上的问题:
严格来说并没有“其它”这个词,是不规范的用法,后来习非成是,很少有人知道这个词是不规范的。
即使用来指物,也应该用“其他”。而且在正式的书籍中,用“其他”来代替“其它”更加正式一些,而且我特地翻了一下您这本书的出版版本,里面的“其它”也被改为“其他”了。所以我建议您也把这里的改一下。


宋劲杉 songjinshan@gmail.com
2010-05-11 09:58:10

说得对,应该改过来。不过这个在线版本改起来麻烦我就不改了。


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!