特定说明符的__attribute__格式?

时间:2013-07-11 08:08:00

标签: gcc clang llvm

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

现在,我知道我期待什么样的指示符(单个双倍),我想让clang意识到这一点。

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

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

我似乎无法找到这些信息。有什么指针吗?

由于

1 个答案:

答案 0 :(得分: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可能会抱怨所说的死代码,然后......