可以将GCC配置为忽略#pragma指令吗?

时间:2019-01-08 22:26:57

标签: c++ gcc pragma

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

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

是否可以通过GCC忽略编译指示?

1 个答案:

答案 0 :(得分:2)

通过快速浏览手册页,答案为“否”,gcc没有“禁用实用程序”功能。

作为一个真正荒谬的解决方法,您可能会简单地要求所有条目完全省略字符串pragma(对块the _Pragma operator也不区分大小写),拒绝任何违反该要求的内容。从本质上讲,任何复杂的事情都需要编写自己的C源代码解析器,我怀疑是否值得这样做。鉴于您可以使用预处理器进行令牌连接的技巧,我也不十分确定这种方法是否会奏效(我正在等待展示这种漏洞的评论)。