gpt4 book ai didi

c++ - 如何通过 GCC 检测 vsnprintf 中的隐式转换

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:24 24 4
gpt4 key购买 nike

我希望 g++ 在 vsnprintf 中检测以下不正确的隐式转换。我尝试:

g++ -Wall -Werror -Wconversion -Wformat  test.cpp -o test.ext

但是没有警告。代码如下:

#include <cstdio>
#include <cstdarg>


void PrintFError ( const char * format, ... )
{
char buffer[256];
va_list args;
va_start (args, format);
vsnprintf (buffer,256,format, args);
perror (buffer);
va_end (args);
}


enum LEVEL
{
INFO = 1,
WRN = 2
};

int main ()
{

PrintFError ("Error opening %s", WRN); // WRN is enum not char*, expecte some compile warning here

return 0;
}

最佳答案

您必须向您的函数添加属性以允许 gcc 检查:

void PrintFError ( const char * format, ... ) __attribute__ ((format (printf, 1, 2)))

现在最好使用可变参数模板。像

template <typename ...Ts>
void PrintFError (const char * format, Ts&&...args)
{
char buffer[256];
vsnprintf (buffer, 256, format, std::forward<Ts>(args)...);
perror (buffer);
}

关于c++ - 如何通过 GCC 检测 vsnprintf 中的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30393665/

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