请问: #define assert(test) ((test) ? (void)0 \ : _Assert(__FILE__ ":" _STR(__LINE__) " " #test))
请问: 在本章中代码: #define assert(test) ((test) ? (void)0 \ : _Assert(__FILE__ ":" _STR(__LINE__) " "#test)) 为什么#test是字符串"assert(is_sorted())"而不是字符串"is_sorted()"? 希望不吝赐教,谢谢!
不好意思,是我的笔误,已经改过来了,谢谢指出!
本章中有段:
最后_Assert调用的形式是_Assert("main.c" ":" "33" " " "is_sorted()"),传给_Assert函数的字符串是"main.c:33 is_sorted()"。
我想请教下这中间的双引号去哪里了?谢谢指教!中间的" "引起一个空格,空格确实被保留了。
在_Assert函数的定义文件中, #include <assert.h> 是没有必要的!
您说得很对,多谢指出!
不明白为什么在assert.h不直接定义为: #define _STR(x) #x 而是要迂回一番: #define _STR(x) _VAL(x) #define _VAL(x) #x ,这两者有什么区别吗?或是后者有什么特别的用途?
宏展开的过程下边已经有详细解释。至于这个问题应该留给你自己去思考。
说一个语文上的问题: 严格来说并没有“其它”这个词,是不规范的用法,后来习非成是,很少有人知道这个词是不规范的。 即使用来指物,也应该用“其他”。而且在正式的书籍中,用“其他”来代替“其它”更加正式一些,而且我特地翻了一下您这本书的出版版本,里面的“其它”也被改为“其他”了。所以我建议您也把这里的改一下。
说得对,应该改过来。不过这个在线版本改起来麻烦我就不改了。
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!