Tag: kernighan and ritchie串

'\ 0'评估为false,“\ 0”评估为true

受K&R第5.5节中描述的程序的启发: void strcpy(char *s, char *t) { while(*s++ = *t++); } C程序 if ('\0') { printf("\'\\0\' -> true \n"); } else { printf("\'\\0\' -> false\n"); } if ("\0") { printf("\"\\0\" -> true \n"); } else { printf("\"\\0\" -> false\n"); } 版画 '\0' -> false "\0" -> true 为什么'\0'和"\0"在C中的评估方式不同? 铿锵的版本3.8.0

C:如何模拟EOF?

我正在阅读K&R的书,并在第一部分的例子中input,有几个例子: while((c = getchar()) != EOF) { //do something } 我正在Windows盒子上testing这些例子,并从cmd提示符运行编译的exe文件。 为了testing上面的例子,我如何模拟一个EOF ? 也就是说,从命令提示符下testing示例时,基本上如何使循环停止?

##预处理器运算符的应用程序有哪些,需要考虑?

正如我以前的许多问题所提到的,我正在通过K&R工作,目前正在进行预处理。 其中一个比较有意思的事情就是##预处理器操作符,这是我之前从来没有学过的东西,我从来没有知道过。 根据K&R: 预处理运算符##提供了在macros扩展期间连接实际参数的方法。 如果replace文本中的参数与##相邻,则将参数replace为实际参数,将删除##和周围的空白区域,并重新扫描结果。 例如,macrospaste连接它的两个参数: #define paste(front, back) front ## back 所以paste(name, 1)创build令牌name1 。 如何以及为什么有人在现实世界中使用它? 什么是它的使用的实际例子,有什么需要考虑的?