首页 > 试题广场 >

.h头文件中的ifndefdefineendif 的作用

[单选题]
.h头文件中的ifndef/define/endif 的作用?
  • 防止重复定义
  • 规范化代码
  • 标志被引用文件内容中可以被共享的代码
  • 以上都不正确
推荐
【正确答案】A
【解析】#ifndef、#define、#endif 是预处理命令,它们一起用来根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译。一般可以用于防止头文件重复包含。格式如下:
#ifndef _NAME_H
#define _NAME_H
// 头文件内容
#endif
当程序中第一次 #include 包含该头文件时,由于 _NAME_H 这个宏还没有定义,所以会定义 _NAME_H 这个宏,并执行”头文件内容“部分的代码;当发生多次 #include 时,因为前面已经定义了 _NAME_H ,所以不会再重复执行”头文件内容“部分的代码。
 
防止头文件重复包含知识点讲解】
更多C++基础专业知识讲解,点击链接即可查看
https://www.nowcoder.com/link/zxyl-cpp36
编辑于 2021-11-17 15:46:09 回复(0)
A,如果未定义,再定义,头文件最后结束所定义的。防止头文件被重复定义
发表于 2015-10-20 13:53:29 回复(0)
A
ifndef/define/endif 的含义:如果未定义 / 那么定义 / 完成假设
一般是用来防止头文件被重复包含,提高编译效率的。
编辑于 2021-11-17 15:46:09 回复(1)
答案:A
主要作用是防止重复引用,比如一个头文件定义如下:
#ifndef _HEAD_H_
#define _HEAD_H_
//代码部分
#endif
假如该头文件第一次被引用,_HEAD_H_没有被定义,所以就执行宏定义,直到#endif
该头文件第二次被引用的时候,_HEAD_H_已经被定义,下面的语句就不会执行
发表于 2015-01-26 11:16:20 回复(0)
选A,防止重复引用。
举个例子:
/*========   Map.h  ==========*/

#ifndef   MAP_HEAD

#define   MAP_HEAD

class A ;

#endif

我在x.cpp中引入了Map.h,又在y.cpp中引入Map.h                             

在程序预编译的时候,它会检查MAP_HEAD有没有被定义,如果没有被定义就执行预编译里面的内容
即:
     #define   MAP_HEAD
     class A ;
之后由于 MAP_HE AD 已经被定义了(假设x.cpp先编译),则在y.cpp 中就不会重新再定义一遍class A,这样就解决了重复引用的问题。                                                                                               



 

发表于 2015-01-08 00:18:20 回复(0)
避免同一文件被重复引用:
方法一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 声明、定义语句
#endif
方法二:
#pragma once 
... ...// 声明、定义语句
编辑于 2017-05-18 20:42:54 回复(0)

防止重复定义头文件的方法主要有以下几种:

  1. 使用条件编译:使用预处理器指令#ifndef、#define和#endif来包裹头文件的内容,确保只有第一次包含头文件时才会执行其中的代码,避免重复定义。详细步骤请参考上面的回答。

  2. 使用 #pragma once:在一些编译器中,可以使用#pragma once指令来代替传统的条件编译方法。这个指令告诉编译器只包含一次该头文件,避免重复定义。示例:

cCopy Code
#pragma once // 在这里放置头文件的内容
  1. 使用预编译头(Precompiled Header):预编译头是预先将常用的头文件编译为二进制形式,然后在编译源文件时直接引用,避免了重复编译和定义的开销。具体使用方法和平台相关,请查看相应的编译器文档。

这些方法都可以有效地防止头文件的重复定义问题。你可以根据具体的项目需求和编译环境选择适合的方法。

发表于 2023-09-26 14:28:24 回复(0)
放止重复包含,提高编译效率
发表于 2023-02-26 18:42:04 回复(0)
重复定义和重复引用能一样吗?
发表于 2022-03-16 09:43:32 回复(0)
#ifndef _x_H_ #define _x_H_ #include <> ... #endif
发表于 2021-10-11 20:06:14 回复(0)
该方法并不能防止编译器将文件包含两次,而是让它忽略第一次包含之外的所有内容
发表于 2019-05-13 22:23:56 回复(0)
A
举例说明:若要定义一个头文件,在头文件中,
#ifndef  _HEAD_PROGRAM_H_
#define _HEAD_PROGRAM_H_
......程序段......
#endif  //_HEAD_PROGRAM_H_
注意:起什么名字不是很重要,只是为了区分不同的头文件名而已,乐意的话,取100位都行
发表于 2019-01-03 19:06:15 回复(0)
A.防止重复引用
发表于 2018-07-23 23:08:13 回复(0)

防止重复定义

发表于 2017-05-04 09:41:50 回复(0)
A
防止该头文件被重复引用
发表于 2015-01-18 16:00:57 回复(0)
答:防止该头文件被重复引用。
发表于 2014-10-25 00:26:11 回复(0)