
《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的内容那最后面是要加上反斜杠“\”来结束定义的吗? 展开
#if !defined (HDR)
#define HDR
(hdr.h的内容)
#endif
此处的 #define HDR 后面并没按照 #define XX(名字) XX(替换文本) 的格式,就是说定义的HDR并没有替换用途,是吗?
如果HDR代表hdr.h的内容那最后面是要加上反斜杠“\”来结束定义的吗? 展开
3个回答
展开全部
#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)
展开全部
这个不一样的,这个地方时做预编译用的,
在编译的时候如果此宏被定义了 代表此个.o 文件已经被编译过了 不需要再编译了
并不是用来替代了 只是用来判断编译的 重复编译就会有变量名冲突问题了
在编译的时候如果此宏被定义了 代表此个.o 文件已经被编译过了 不需要再编译了
并不是用来替代了 只是用来判断编译的 重复编译就会有变量名冲突问题了
追问
这个我知道,问题不是这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用#ifndef HDR,宏定义都是编译器命令,不属于编程语言,上面的定义是 如果#ifndef HDR则编译下面的内容,知道遇到#endif。这里的HDR只是用来识别后面的内容有没有被编译过,没有替换用途
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询