是否可以将 GCC 配置为忽略 #pragma 指令

Can GCC be configured to ignore #pragma directives?

本文关键字:#pragma 指令 配置 GCC 是否      更新时间:2023-10-16

我们正在沙盒环境中编译和运行用户提交的C++程序,使用以下编译命令:

g++ -std=gnu++11 -O2 -o program.exe program.cpp
但是,用户可以使用杂注指令覆盖编译标志。例如,可以使用以下代码覆盖优化级别:
#pragma GCC optimize("Ofast")
我们无法控制提交进行编译的源代码,但我们需要防止编译选项被覆盖。

有没有办法忽略GCC的编译指示?

从快速扫描手册页来看,答案是"否",gcc没有"禁用杂注"功能。

作为一种真正荒谬的解决方法,您可能简单地要求所有条目完全省略字符串pragma(不区分大小写以阻止_Pragma运算符),拒绝任何违反该要求的内容。任何更复杂的事情本质上都需要编写自己的 C 源代码解析器,我怀疑这是否值得麻烦。考虑到您可以使用预处理器玩的令牌串联技巧,甚至不确定这是否有效(我等待演示此类漏洞的评论)。