Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ #pragma-once位置:在#include'之前或之后;s_C++ - Fatal编程技术网

C++ #pragma-once位置:在#include'之前或之后;s

C++ #pragma-once位置:在#include'之前或之后;s,c++,C++,在现有代码中,我看到在头include之后使用pragma //Some_Header.h #include "header1.h" #include "header2.h" #pragma once //implementations 而不是 //Some_Header.h #pragma once #include "header1.h" #include "header2.h" //implementations 我认为它总是需要像第二个例子一样,你的#pragma定义在哪里还

在现有代码中,我看到在头include之后使用pragma

//Some_Header.h
#include "header1.h"
#include "header2.h"

#pragma once

//implementations
而不是

//Some_Header.h
#pragma once

#include "header1.h"
#include "header2.h"

//implementations
我认为它总是需要像第二个例子一样,你的#pragma定义在哪里还是预处理器在你的文件中的任何地方提取它

编辑

我知道#pragma once不是标准的一部分,include guard是标准的一部分,但这不是我的问题。

#pragma once
应该放在包含任何标题之前。因此,包含标题的内容可能会改变pragma行为:

//whatever.hpp
...
#定义一次lol_no
//你的头.hpp
#包括“whatever.hpp”
#pragma once//警告C4068:未知pragma

请记住,这个特性,虽然广泛地被各种编译器所支持,但它并不是标准C++的一部分。我知道无数的关于这一点的文章没有得到任何地方的支持,使得我无法真正找到我想要的解释。我从来没有使用过它。所以我不确定——但我会尽可能地将它贴在文件开头。这更合理。我也一直这么认为,这是包含守卫的一种翻译,但看到这一点,我想确定。为了解决重复的问题:另一个问题是关于pragma once position vs include guards。这个问题讨论pragma once vs header includes。所以我认为它的标记不正确。