gpt4 book ai didi

c++ - #ifndef C++ 中包含守卫的语法

转载 作者:可可西里 更新时间:2023-11-01 17:04:46 26 4
gpt4 key购买 nike

我目前正在为 CS 类(class)的期末考试学习,我遇到了一个关于 C++ #ifndef 语法的小问题(也许是大问题?)。

在将#infndef 用作#include 守卫时,我查看了它的语法,网上的大多数内容似乎都在说:

#ifndef HEADER_H
#define "header.h"
...
#endif

但我类的教程幻灯片显示示例如下:

#ifndef __HEADER_H__
#define "header.h"
...
#endif

我想知道两者之间有什么区别(如果有的话)。考试很可能会要求我编写一个 #include 守卫,我知道传统的智慧是按照教授/导师所说的去做,但如果在编译过程中存在差异,我想知道。

最佳答案

通常的做法是两者都不做,而是将 include guard inside 放在头文件中,因为这样可以减少重复。例如:

header.h

#ifndef HEADER_H
#define HEADER_H

// Rest of header file contents go here

#endif

具体使用什么作为宏名称取决于您的特定编码标准。但是,C 和 C++ 标准中有各种微妙的规则阻止您使用以下划线开头的标识符,1 因此您应该避免使用 __HEADER_H__,以确保安全边。

还值得一提的是,您应该选择不太可能与您的代码库中的任何其他内容发生冲突的内容。例如,如果您碰巧在其他地方有一个名为 HEADER_H 的变量(我知道这不太可能),那么您最终会遇到一些令人恼火的错误。


<子>1。参见例如C99 标准的第 7.1.3 节。

关于c++ - #ifndef C++ 中包含守卫的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10077025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com