是否可以将 GCC 配置为忽略 #pragma 指令
Can GCC be configured to ignore #pragma directives?
我们正在沙盒环境中编译和运行用户提交的C++程序,使用以下编译命令:
g++ -std=gnu++11 -O2 -o program.exe program.cpp
但是,用户可以使用杂注指令覆盖编译标志。例如,可以使用以下代码覆盖优化级别: #pragma GCC optimize("Ofast")
我们无法控制提交进行编译的源代码,但我们需要防止编译选项被覆盖。有没有办法忽略GCC的编译指示?
从快速扫描手册页来看,答案是"否",gcc
没有"禁用杂注"功能。
作为一种真正荒谬的解决方法,您可能简单地要求所有条目完全省略字符串pragma
(不区分大小写以阻止_Pragma
运算符),拒绝任何违反该要求的内容。任何更复杂的事情本质上都需要编写自己的 C 源代码解析器,我怀疑这是否值得麻烦。考虑到您可以使用预处理器玩的令牌串联技巧,甚至不确定这是否有效(我等待演示此类漏洞的评论)。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- 函数名是c中该函数的第一条指令的地址吗
- 错误:无效的预处理指令 #i 的意思是 #if?
- 组装指令中乘法的下部和上部是什么
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- #pragma 包(1)会导致分段错误
- OpenMP 与有序和关键指令并行
- 禁止显示有关包含文件中 #pragma 包的警告
- C++中的移动分配出现问题.非法指令: 4.
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- 将多个Pragma指令放入一个预处理器定义中
- 是否可以将 GCC 配置为忽略 #pragma 指令
- 如何在Visual Studio中自动缩进#pragma指令
- 正确使用嵌套的#pragma omp指令
- 指令#pragma,为什么这样称呼它
- 移植一些代码到GCC,有一些问题与#pragma指令
- 是否有包含目录的pragma指令
- Visual Studio中pragma pack指令的作用域