众所周知,​​#pragma once​​语句是防止头文件重复包含非常常用的一条语句

VS编译器在创建.h文件的时候会自动帮你在开头添加这个语句

但是在gcc编译器下,这个语句就可能会出现一些问题


所使用编译器:

  • VS2019(windows10)
  • 树莓派(linux-gcc)


warning:​​#pragma once in main file​

在我尝试在linux环境下使用​​#pragma once​​语句时,遇到了这个报错

gcc编译器中出现warning: #pragma once in main file_linux

解决这个问题的办法很简单,就是不要编译头文件


编译器会自动展开头文件,无需手动编译


gcc编译器中出现warning: #pragma once in main file_c语言_02

gcc编译器中出现warning: #pragma once in main file_树莓派_03

出现问题原因

网上查了查:出现这个问题的原因是编译器在编译头文件的时候,​​#pragma once​​本身是没有含义的语句,所以报错了。

  • 也有人说是因为linux不支持这个语句,我们来试试

右侧代码中包含了两个test.h的引用,在预处理中只包含了一次

gcc编译器中出现warning: #pragma once in main file_c语言_04

去掉头文件中的​​#pragma once​​,再次编译,可以看到预处理文件中出现了两次头文件的内容

gcc编译器中出现warning: #pragma once in main file_linux_05

这说明linux-gcc编译器是支持该语句的,并非网上说的不支持!

其他解决方法

如果你的gcc编译器不管咋弄都有这个报错,咱可以不用它嘛!

使用条件编译指令ifndef也可以达成防止头文件重复包含的效果

#ifndef __TEST_H__//如果没有定义过这个符号
#define __TEST_H__//定义该符号

//头文件内容

#endif

gcc编译器中出现warning: #pragma once in main file_头文件_06

查资料查到外网去了~

刚刚写预处理博客的时候,查有关这个问题的资料,百度都给我推了外网的论坛

gcc编译器中出现warning: #pragma once in main file_树莓派_07


 


网上有关这个报错的信息的确不多,特此写篇博客记录一下


如果对你有帮助,还请点个????,万分感谢!