0

目前,当我编译我的扩展时,我得到,

warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   57 |  uint32 n = fctx->n;

PostgreSQL 当前-Wdeclaration-after-statement在编译期间使用。他们专门在pgxs我的机器上的全局make文件中设置了这个选项,

/usr/lib/postgresql/13/lib/pgxs/src/Makefile.global

它与他们的CFLAGS,

CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer

无论如何要禁用-Wdeclaration-after-statement还是每个 PostgreSQL 扩展作者都必须采用相同的约定?我可以在我的扩展程序中覆盖 CFLAGS 吗?

4

2 回答 2

0

可能您可以通过链接中描述的说明覆盖它

该变量PG_CFLAGS将附加到CFLAGS,所以只需添加-Wno-declaration-after-statement

于 2021-10-29T08:57:44.523 回答
0

我能够通过结束我的扩展来消除这些警告Makefile

PG_CFLAGS += $(PERMIT_DECLARATION_AFTER_STATEMENT)
include $(PGXS)

RhodiumToad 提供了一种替代方法include $(PGXS)

include $(PGXS)
$(OBJS): CFLAGS += $(PERMIT_DECLARATION_AFTER_STATEMENT)

谢谢出去 RhodiumToad on ircs://irc.libera.chat:6697/#postgresql, 他接着说

configure 测试是否-Wno-declaration-after-statement有效并相应地设置该变量实际上我认为它检查-Wdeclaration-after-statement并且如果有效,假设 -Wno-... 也有效,您可以在 include之后放置该规则$(PGXS),因此您可以$(MAJORVERSION)根据需要或以PERMIT_DECLARATION_AFTER_STATEMENT被定义为条件

于 2021-10-30T19:17:58.097 回答