我可以添加自定义 #pragma 规则吗?
Can I add custom #pragma rule?
在ODB(C++持久性库)上,#pragma db
用于反射等,但它不是标准或特定于编译器的指令。
#pragma db object
class person
{
...
private:
friend class odb::access;
person () {}
#pragma db id
string email_;
string name_;
unsigned short age_;
};
我可以在 ODB 等编译器上添加自定义 #pragma 规则吗?
由于这不是一个标准的#pragma
,它实际上被ODB的预处理器使用,它为"真正的编译器"吐出处理过的C++代码。
你可以做类似的事情,通过编写一个程序来解析源代码并对其进行修改。这不是你能在五分钟内破解的东西,但是使用一些库(如libclang),你可以有效地读取,处理和输出修改后的源代码,并将其发送到编译器。
要为编译器本身生成真正的#pragma
,您必须修改编译器的源代码。
编辑:生成自己的支持自定义编译指示的完整编译器的一种相对轻量级的方法是从 clang 开始,然后构建自己的编译器驱动程序,或者修改cc1_main.cpp。
然后使用Preprocessor::addPragmaHandler()
介绍您自己的编译指示。这将修改编译器,但实际上不必更改实际的编译器源代码 - 维护对实际编译器的更改比拥有应用于编译器源代码的公共接口的"插件"要困难得多。即使这些确实发生了变化,它也不像编译器源代码本身中的编译指示列表那样"繁忙"。
通常,否:不能定义或重新定义#pragma
或其参数。
但是,如果您愿意修改编译器和预处理器的源代码,则可以添加各种功能。 如果您有源代码,这是一项中等复杂度的任务。
请注意,许多#pragma
对应于命令行编译器选项:如果存在,则更容易实现。
相关文章:
- 此代码是否违反一个定义规则
- 生成文件不对文件使用隐式规则
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 静态结构和一个定义规则
- 尽管遵循了规则,内存泄漏在哪里
- 这是关于成员访问规则的正确摘要吗
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 增强精神解析器规则以检测语句中的特殊结尾
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- #pragma 包(1)会导致分段错误
- 禁止显示有关包含文件中 #pragma 包的警告
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 编译时检查 #pragma 包的使用情况
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- 为什么此指针值不能转换为整数的规则是什么?
- 传递通用函数,用于梯形规则的数值积分
- C++内存模型中的确切规则阻止在获取操作之前重新排序
- 模板如何影响C++中隐式声明的规则?
- antlr 规则上下文是否可以独立于目标
- 我可以添加自定义 #pragma 规则吗?