请教 C 语言 #ifndef 的问题

看 Mark Allen Weiss 的《数据结构与算法→C 语言描述》,P34 的代码,他给的是
#ifndef _List_H
一些代码
#endif
我明明记得应该是
#ifndef _List_H
#define _List_H
一些代码
#endif

哪里出了问题?
send from my openSUSE

不清楚是不是你说的那段 users.cis.fiu.edu/~weiss/dsaa_c2e/list.h
打印错了?

我估计也是这样吧。我还看到其它地方有明显的打印错误。比如他写的 ElementType 是作为一个类型的,接下来又写成了 Element Type,多了个空格就很坑爹了啊!都不知道出版社怎么印刷的。

预编译语句 #define 不写也行。不过不写的话 #ifdef#ifndef 就没有意义了。
头文件里面写 #define 是编译的时候为了防止出错。标准情况下还是要写一下的。
书上错的多了去了。君不见谭浩强被黑出翔了都。

有些东西不一定是当前代码块内自己 #define 的,比如这种:

#ifdef DEBUG
	if (debug)
		printf("crypto_update: %s
", statstr);
#endif

上面这段是 NTP 的 ntpd/ntp_crypto.c 里面的,刚才刚好看到这个地方就顺手粘过来了…
还有很多用 #ifdef 来判断操作系统或者某个依赖库是否存在 / 是否特定版本的都是一样的道理,已经在文件外 #define 过了