【问题标题】:__attribute__ format for specific specifiers?__attribute__ 特定说明符的格式?
【发布时间】:2013-07-11 08:07:59
【问题描述】:

我想为我的 API 的用户提供传递自定义格式字符串的可能性。

现在,我知道我期待什么样的说明符(对于单个双精度),我想让 clang 意识到这一点。

clang documentation(实际上只是指向gcc documentation)让我看起来好像只能根据我的函数/方法的实际参数来指定格式。

但是,我只想告诉 clang:“如果它包含一个且只有一个 %f 说明符(带有调用者想要的任何标志、宽度或精度),就可以了”

我似乎无法找到该信息。有什么指点吗?

谢谢

【问题讨论】:

  • 您的问题不清楚,因为它似乎在讨论不相关的事情。你能用一些代码示例澄清一下 - 你究竟想看到什么?
  • @EliBendersky:在我看来,提问者想要定义 printf 格式语法的受限子集,并让编译器拒绝任何不符合它的内容。
  • 彼得·霍西,你是对的,这是我的意图。如果不拒绝,至少要发出警告。

标签: gcc clang llvm


【解决方案1】:

查看gcc 文档,我认为没有办法直接做你想做的事。 (我假设您的目标是需要一种适合打印单个float 的格式。) 我能想到的最接近的事情是,如果你有你的功能void myfunc(const char *fmt) 您可以将其重写为

extern void do_myfunc(const char *fmt); /* the real body of myfunc() */
inline void myfunc(const char *fmt) { /* put this in the header */
    if (0) {
        float f = 0.0f;
        printf(fmt, f);
    }
    do_myfunc(fmt);
}

并依靠clang 删除死代码。当然,clang 可能会抱怨说死代码,然后...

【讨论】:

  • 感谢您确认我的怀疑:显然,没有办法(优雅地)这样做:(
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2016-02-13
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
相关资源
最近更新 更多