☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

parmN 的声明应符合要求

6.5.3 ID_badParmN
目录 › next › previous

可变参数列表中省略号的前一个参数称为 parmN,如果:

  • 在 C 代码中,parmN 为数组、函数,或具有寄存器存储类,以及与默认参数提升后不兼容的类型
  • 在 C++ 代码中,parmN 为引用、数组、函数,或具有与默认参数提升后不兼容的类型

会导致标准未定义的行为。

示例:

void foo(float f, ...);          // Non-compliant
void bar(int& r, ...);           // Non-compliant in C++
void baz(register int n, ...);   // Non-compliant in C

例中参数 f 为 float 型,与“默认参数提升(default argument promotion)”后的类型 double 不兼容,参数 r 为引用,参数 n 被 register 关键字限定具有寄存器存储类,这种代码均会导致标准未定义的行为。

相关

ID_badVaArgType ID_forbidVariadicFunction

依据

ISO/IEC 9899:1999 7.15.1.4(4)-undefined ISO/IEC 9899:2011 7.16.1.4(4)-undefined ISO/IEC 14882:2003 18.7(3)-undefined ISO/IEC 14882:2011 18.10(3)-undefined

参考

SEI CERT EXP58-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.