众所周知,#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_树莓派

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

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

【树莓派开发】gcc编译器中出现warning: #pragma once in main file_linux_02

【树莓派开发】gcc编译器中出现warning: #pragma once in main file_头文件_03

出现问题原因

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

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

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

【树莓派开发】gcc编译器中出现warning: #pragma once in main file_树莓派_04

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

【树莓派开发】gcc编译器中出现warning: #pragma once in main file_c语言_05

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

其他解决方法

如果你的gcc编译器不管咋弄都有这个报错,咱可以不用它嘛!
使用条件编译指令ifndef也可以达成防止头文件重复包含的效果

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

//头文件内容

#endif

【树莓派开发】gcc编译器中出现warning: #pragma once in main file_开发语言_06


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

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