【问题标题】:PostgreSQL C Extensions without -Wdeclaration-after-statement没有 -Wdeclaration-after-statement 的 PostgreSQL C 扩展
【发布时间】:2021-10-29 05:58:03
【问题描述】:

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

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 吗?

【问题讨论】:

    标签: c postgresql makefile postgresql-extensions


    【解决方案1】:

    也许你可以通过link中描述的说明覆盖它

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

    【讨论】:

      【解决方案2】:

      我可以通过结束我的扩展程序的Makefile 来消除这些警告,

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

      RhodiumToad 在include $(PGXS)之后提供了另一种方式

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

      感谢 RhodiumToad 在ircs://irc.libera.chat:6697/#postgresql,他接着说

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

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 2021-11-03
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 2016-03-24
        相关资源
        最近更新 更多