PostgreSQL C扩展编译如何禁用-Wdeclaration-after-statement警告
问题解答
1. 可以直接在自己的扩展中覆盖CFLAGS配置,无需修改全局pgxs文件
不需要改动/usr/lib/postgresql/13/lib/pgxs/src/Makefile.global全局配置,只需要在你自己开发的扩展的Makefile中,添加如下配置即可:
PG_CFLAGS += -Wno-declaration-after-statement
PG_CFLAGS是pgxs预留的用户自定义编译参数变量,你追加的参数会在全局CFLAGS之后生效,-Wno-declaration-after-statement会直接抵消全局配置中开启的-Wdeclaration-after-statement规则,对应警告会直接消失。
2. 该代码约定不是强制所有扩展开发者遵守
PostgreSQL核心代码库要求遵循C90标准编码规则,禁止混合变量声明和执行代码,默认开启该警告是为了对齐核心代码的编码规范,方便有计划向上游贡献代码的开发者提前适配规范。如果你开发的是私有扩展、不打算提交到PostgreSQL核心代码库,完全可以关闭该警告,不会对扩展的功能、兼容性产生任何影响。
3. 可选无配置修改方案
如果你不想调整编译配置,也可以直接修改代码适配规范:把所有变量声明移动到所在代码块的最开头,即可消除该警告。比如你报错的第57行uint32 n = fctx->n;,移动到所在代码块的所有执行语句之前即可。
内容的提问来源于stack exchange,提问作者Evan Carroll
相关产品推荐
相关产品推荐

