gpt4 book ai didi

c++ - 在编译时根据 printf 格式检查参数的可移植方式,C++

转载 作者:太空狗 更新时间:2023-10-29 21:41:31 27 4
gpt4 key购买 nike

我有一个日志函数 my_log(const char* my_fmt, ...) 进行自定义日志记录。我希望 my_log 遵循 C printf 约定。为了省去麻烦,我想警告用户 printf() 会给出的任何警告和错误。我需要的 printf 功能是 -Wformat 警告。当然还有错误。

问题:如何在没有任何运行时开销的情况下实现这一目标? (不使用编译器特定功能)。

在 GCC 中,我可以使用 __attribute__((format()))

void __attribute__((format(printf,1,2))) my_log(const char* fmt, ...){ }

目前,我需要在英特尔 C++ 编译器 (ICC) 和 GCC 上进行编译。如果能在ICC中实现属性校验就好了。如果有一种纯 C++ 语言技巧可以在编译时进行此类检查,那就太棒了。

最佳答案

没有可移植的方法来做到这一点。即使对于 printf 系列,该语言也会让编译器假定您知道自己在做什么并编译您编写的内容,尽管 g++ 在您启用它时会提供有用的警告。

既然您的项目是 C++,为什么不使用 C++ 习惯用法并使用 boost::format ( http://www.boost.org/doc/libs/1_57_0/libs/format/doc/format.html ) 或 IO 流?然后您将获得类型安全,甚至不需要担心验证输入。

关于c++ - 在编译时根据 printf 格式检查参数的可移植方式,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28610392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com