gcc 预编译头文件:主文件中的 pragma once

Moc*_*han 9 c++ g++ pragma precompiled-headers

我创建了一个头文件。一些简单的如下。

#pragma once

#include <iostream>

template<typename T>
void say(T t) {
    std::cout << t << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

然后用于g++创建gch带有g++ hello.h. 它给了我这个警告->

pch.h:2:9: warning: #pragma once in main file
    2 | #pragma once
      |         ^~~~
Run Code Online (Sandbox Code Playgroud)

但是gch创建的文件和预编译的头文件工作正常。如果我使用标题守卫,这个错误就会消失。

我在这里做错了吗?

Lig*_*ica 6

你没有做错任何事;这是之前在问题跟踪器中提到的实施质量问题(但是,据我所知,目前没有计划改变这种行为)。

在 Clang 中,您可以关闭针对特定编译器调用的警告(使用-Wno-pragma-once-outside-header);在海湾合作委员会中,您现在只需要微笑并忍受它。