《C程序设计语言》中防止头文件被重复定义的问题

在头文件hdr.h中:#if!defined(HDR)#defineHDR(hdr.h的内容)#endif此处的#defineHDR后面并没按照#defineXX(名字)... 在头文件hdr.h中:

#if !defined (HDR)
#define HDR
(hdr.h的内容)
#endif

此处的 #define HDR 后面并没按照 #define XX(名字) XX(替换文本) 的格式,就是说定义的HDR并没有替换用途,是吗?

如果HDR代表hdr.h的内容那最后面是要加上反斜杠“\”来结束定义的吗?
展开
 我来答
paniarch
2013-08-22 · TA获得超过288个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:162万
展开全部
#define HDR只是表示定义了这个宏,他的内容是空的,可以用#ifdef HDR来判断这个宏是否有定义。HDR并没有代表hdr.h的内容,只是在第二次包含hdr.h的时候,#if !defined(HDR)这个判断会是false,而不会包含hdr.h的实际内容。这样预处理完后,就只有一份实际生效的内容。

宏定义并没有规定说要用'\'来结束定义,只要求宏定义在同一行,所以一般宏定义后面加'\'只是转义换行符,这样分行写方便阅读。没有其他意义,所以要注意宏定义的'\'后面不能有空格或者其他字符,否则可能会引起一些奇怪的错误。
追问
你是说假设要给HDR的替换内容"XAC"分行,那就这样:
#define HDR X\
A\
C

而如果定义HDR的行末尾没有内容,那HDR就只是用来做判断的?
追答

只能说语法层面是可以的,但是这样只是跟自己过不去,能写成一行的还是尽量一行呀。

比如把代码写成这样,你觉的行不行呢

pri\
ntf\
("hello world\n");

 宏分行主要是为了需要分行的情况,比如

#define TEST(X) do {\
   printf("%s:%d: %s\n",  __FILE__, __LINE__, X);\
   int i;\
    for (i=0; i<10; i++) {\
      printf("test %d\n", i); \
   }\
} while (0)
hgd7123
2013-08-22 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:126
采纳率:66%
帮助的人:94.1万
展开全部
这个不一样的,这个地方时做预编译用的,

在编译的时候如果此宏被定义了 代表此个.o 文件已经被编译过了 不需要再编译了
并不是用来替代了 只是用来判断编译的 重复编译就会有变量名冲突问题了
追问
这个我知道,问题不是这个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孟戈大师
2013-08-22 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:173
采纳率:100%
帮助的人:97.9万
展开全部
用#ifndef HDR,宏定义都是编译器命令,不属于编程语言,上面的定义是 如果#ifndef HDR则编译下面的内容,知道遇到#endif。这里的HDR只是用来识别后面的内容有没有被编译过,没有替换用途
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式