CPPCHECK C++成员函数上的格式字符串
cppcheck format string on member functions of C++
aa.h
#ifndef __US_LOG_FILEA_H_
#define __US_LOG_FILEA_H_
namespace AA{
class A{
public:
A();
~A();
static A& Ins(){
static A obj;
return obj;
}
void do_p(const char *cat, int level, const char *Format ...); // ok
void do_p(const char *cat, int level, const char *Format, ...); // error
};
} // namespace AA
extern AA::A g_A;
#endif // __US_LOG_FILEA_H_
格式.cpp
void test()
{
g_A.do_p("global func", 2, "%sn", str);
}
答.cfg:
<?xml version="1.0"?>
<def>
<function name="AA::A::do_p">
<noreturn>false</noreturn>
<leak-ignore/>
<formatstr type="printf"/>
<arg nr="3">
<formatstr/>
<not-uninit/>
</arg>
</function>
</def>
cppcheck --enbale-style --library=a.cfg formatstr.cpp
如果无效do_p(常量字符*猫,整数级别,常量字符*格式...(; CPP 检查输出: 警告:格式字符串(第 1 号(中的 %s 需要"字符 *"bu t 参数类型为"std::string"。[invalidPrintfArgType_s] g_A.do_p("global func", 2, "%s", str(;
但do_p(常量字符 *猫,整数级别,常量字符 *格式,...(; CPP 检查输出无
为什么?
Cppcheck的版本是1.89.0.0
提前谢谢。
为什么?
void do_p(const char *cat, int level, const char *Format ...); // ok
大概是因为 cppcheck 无法将const char *Format ...
识别为 printf 格式和可变参数,除非它们用逗号分隔,所以你没有收到错误。
void do_p(const char *cat, int level, const char *Format, ...); // error
您配置了 cppcheck 以检查错误的格式/参数配对,因此这是您应该出现错误的地方。
1st,将 Cpp 成员函数代码修改为 C 样式函数
2nd,删除重载功能
相关文章:
- 是否可以从格式字符串中检索"width"
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 从用户定义的类生成格式字符串?
- 如何连接格式字符串?
- 如何在C++中将"%Y%m%d"格式字符串转换为time_t变量?
- CPPCHECK C++成员函数上的格式字符串
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能
- '|' scanf 格式字符串是什么意思
- 如何使用 msgfmt 验证格式字符串中的位置表示法占位符
- sscanf_s:格式字符串"%d"需要类型为"int *"的参数,但可变参数 4 的类型为"WORD *"
- C4477: 'fprintf' :格式字符串 '%s' 需要类型为"char *"的参数,但可变参数 1 的类型为"int *"
- 如何使用OpenSSL API从其PEM格式字符串中读取RSA公钥
- C 格式字符串宏
- C++等效于 C 的格式字符串
- 如何使用 C++ 中的 rapidjson 库从 json 格式字符串中获取值
- _vsnprintf和_vsnprintf_s的格式字符串中的可用百分比字符
- 如何将格式字符串发送到iostream
- 跨平台格式字符串
- 使用 swprintf() 打印"0x0"的格式字符串应该是什么?