我创建了头文件。简单一些如下。
#pragma once
#include <iostream>
template<typename T>
void say(T t) {
std::cout << t << std::endl;
}
,然后使用g++
用gch
创建g++ hello.h
预编译头。它给了我这个警告->
pch.h:2:9: warning: #pragma once in main file
2 | #pragma once
| ^~~~
但是创建的gch
文件和预编译的头文件可以正常工作。如果使用标题保护,则该错误消失。
我在这里做错什么了吗?
答案 0 :(得分:2)
您没有做错任何事;这是has been mentioned on the issue tracker before的实施质量问题(但据我所知,目前尚无改变行为的计划)。
在Clang中,您可以针对特定的编译器调用(使用-Wno-pragma-once-outside-header
)关闭警告;在GCC中,您现在只需要咧着嘴笑即可。
答案 1 :(得分:0)
用于生成预编译头文件的主要源文件通常是一个编造的“间接”头文件,其中只包含一组#include,用于您要预编译的所有实际头文件。 当您以这种方式使用机器时,主文件中不需要 #pragma once(也不需要保护),因此它可以按预期工作而不会发出警告。