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

include 指令应符合标准格式

3.1.1 ID_illFormedInclude
目录 › next › previous

#include 后只应为 < 头文件路径 > 或 " 头文件路径 ",否则会导致标准未定义的行为。

示例:

#include <string.h>         // Compliant
#include "string.h"         // Compliant

#define HEADER "string.h"
#include HEADER             // Compliant

#include stdlib.h           // Non-compliant, undefined behavior

例中对 string.h 的引用符合标准,而对 stdlib.h 的引用会导致标准未定义的行为。

注意,由引号标识的头文件路径并非字符串常量,不应对其使用字符串常量的特性,如:

#include "stdlib" ".h"      // Non-compliant, implementation defined

例中 "stdlib" ".h" 是否会被连接成 "stdlib.h" 由实现定义,存在可移植性方面的问题。

另外,如下形式的代码也是不符合标准的:

#include L"foo"             // Non-compliant
#include u"bar"             // Non-compliant
#include U"baz"             // Non-compliant
#include R"(..\foo\bar)"    // Non-compliant

相关

ID_nonStandardCharInHeaderName

依据

ISO/IEC 9899:1999 6.10.2 ISO/IEC 9899:2011 6.10.2 ISO/IEC 14882:2003 2.8 ISO/IEC 14882:2003 16.2(4)-undefined ISO/IEC 14882:2003 16.2(4)-implementation ISO/IEC 14882:2011 2.9 ISO/IEC 14882:2011 16.2(4)-undefined ISO/IEC 14882:2011 16.2(4)-implementation

参考

MISRA C 2004 19.3 MISRA C 2012 20.3 MISRA C++ 2008 16-2-6
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.