C语言的头文件问题

#ifndef_H_xxxxx_H_A#define_H_xxxxx_H_A//typedefstructnode{//intvalue;//structnode*nex... #ifndef_H_xxxxx_H_A
#define_H_xxxxx_H_A

//typedef struct node{
// int value;
// struct node *next ;
//}Node;

#endif

未被注释掉的#打头那几行语句的作用是什么?
展开
 我来答
文正153
推荐于2016-10-04 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:561万
展开全部
为防止头文件被重复使用.
假如说, A.h要用到B.h的内容, 那么在A.h里必须得加上#include "B.h", 但是如果A.cpp中也要用到B.h内的东西, 那么一般也会习惯上在A.cpp里加上#include "B.h".

那么问题来了, A.h已经加了B.h, A.cpp再加入B.h, 这样就会重复定义一些东西, 会报错.
但是如果每加入一个头文件, 都定义一个宏, 这样只用判断这个宏有没有被定义, 就可以知道这个源文件有没有包含过这个头文件了.

这东西在C++里是非常乱的, 因为C++里有类, 类有继承.
更多追问追答
追问
你的这段话我接着问一个问题——“但是如果每加入一个头文件, 都定义一个宏, 这样只用判断这个宏有没有被定义, 就可以知道这个源文件有没有包含过这个头文件了.”

如果判断出这个宏已经被定义了,那会发生什么?也会报错?
还是不太理解。
我见教科书上都是像我提问那样先写成一个头文件,然后每个源文件都会通过#include ”xxxx.h“使用这个头文件。
这样也是一个头文件被多个源文件使用啊
追答
#ifdef, #ifndef, #if, #else, #pragram once等之类宏, 如果后面跟的表达示为真, 则
#***到#endif之间的的代码会被保留. 如果为假, 那么它之间的代码会被删除.

VC++编译器, 在工程设置后面加入/P, 会在工程目录下生成一个和源文件名一样的.i文件, 同时编译器报错(因为没有生成.obj文件) 这个.i文件就是预处理器把你写的代码经过处理后, 最后编译器得到的代码.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-04-18
展开全部
#include guard。防止同一个头文件被 #include 两遍导致重复定义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyz郑远征
2015-04-18 · TA获得超过1115个赞
知道小有建树答主
回答量:462
采纳率:100%
帮助的人:451万
展开全部
防止头文件重复包含
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式