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

本文探讨了在Windows的VS2019和Linux的gcc环境下,#pragma once语句的差异。在Linux下使用#pragma once时遇到warning:#pragmaonce in main file的问题,原因是gcc在预处理时不认可此指令。然而,实验表明gcc实际上支持该语句,不会重复包含头文件。为了解决报错,可以避免直接编译头文件,或者使用 ifndef 宏来防止头文件重复包含。文章提供了一个简单的示例展示如何使用 ifndef 实现相同功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,#pragma once语句是防止头文件重复包含非常常用的一条语句
VS编译器在创建.h文件的时候会自动帮你在开头添加这个语句
但是在gcc编译器下,这个语句就可能会出现一些问题

所使用编译器:

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

warning: #pragma once in main file

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

image-20220310214852830

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

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

image-20220310215136660

image-20220310215008979

出现问题原因

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

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

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

image-20220310215650055

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

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

其他解决方法

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

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

//头文件内容

#endif


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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕雪华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值