MISRA C-2012准则之注释

目录

[一、MISRA C简介](#一、MISRA C简介)

二、注释

错误示例1:嵌套注释

[错误示例2:在 // 注释中进行行拼接](#错误示例2:在 // 注释中进行行拼接)

[错误示例3:混合使用 /* */ 和 // 导致意外注释](#错误示例3:混合使用 /* */ 和 // 导致意外注释)

错误示例4:注释干扰字符串字面量

错误示例5:注释干扰预处理指令


相关文章如下:

1、《MISRA C-2012准则之标准C环境准则》

2、《MISRA C-2012准则之未使用的代码的处理》

3、《MISRA C-2012准则之注释》

4、《MISRA C-2012准则之标识符》

5、《MISRA C-2012准则之常量》

6、《MISRA C-2012准则之声明与定义》

7、《MISRA C-2012准则之初始化》

8、《MISRA C-2012准则之基本数据类型》

9、《MISRA C-2012准则之指针类型转换》

10、《MISRA C-2012准则之表达式》

一、MISRA C简介

MISRA C是由汽车产业软件可靠性协会(MISRA)提出的C语言开发标准。其目的是在增进嵌入式系统的安全性及可移植性。

MISRA C一开始主要是针对汽车产业,不过其它产业也逐渐开始使用MISRA C:包括航天、电信、 国防、医疗设备、铁路等领域中都已有厂商使用MISRA C。

MISRA C的第一版是在1998年发行,一般称为MISRA-C:1998。在2004年时发行了第二版的MISRA C,称作MISRA-C:2004。2012年发布第三版,为当前最新有效的C语言规范版本,称为MISRA-C:2012。 MISRA C不能100%保证程序不出问题,但是能尽可能的预防,总结一下,基本上使用MISRA C具有以下五个维度的优势:

1、提升可靠性

2、提升可读性

3、提升可移植性

4、提升可维护性

5、提升安全性

二、注释

必需。不允许嵌套注释。

必需。不允许在//注释中进行行拼接。

错误示例1:嵌套注释

复制代码
#include <stdio.h>

int main() {
    /* 这是一个外层注释
       /* 这是一个内层注释 */ // 错误:嵌套注释
       这是一个外层注释的结尾 */
    return 0;
}

问题 :C语言不支持嵌套注释。外层注释会在第一个 */ 处终止,导致后续代码被注释掉,引发语法错误。

错误示例2:在 // 注释中进行行拼接

复制代码
#include <stdio.h>

int main() {
    // 这是一个注释,但使用反斜杠尝试拼接: \
    // 这是下一行,但会被编译器视为代码(错误)
    printf("Hello\n"); // 实际上会被编译为 // 这是下一行,但会被编译器视为代码(错误)
    return 0;
}

问题 :// 注释不能跨行拼接。反斜杠在行尾不会使注释延续到下一行,下一行会被视为代码或另一个注释,导致语法错误。

错误示例3:混合使用 / / 和 // 导致意外注释

复制代码
#include <stdio.h>

int main() {
    /* 这是一个注释,但内部包含 // */
    // 这部分会被视为注释,但实际是代码的一部分
    printf("Hello\n"); // 错误:注释后的代码会被忽略
    return 0;
}

问题 :/* */ 注释内的 // 会被视为注释的一部分,而 // 注释会忽略其后的所有内容(包括 printf("Hello\n");),导致代码逻辑错误。

错误示例4:注释干扰字符串字面量

复制代码
#include <stdio.h>

int main() {
    printf("/* 这不是注释 */\n"); // 字符串内的 /* */ 会被视为普通字符
    /* 这是一个注释,但内部包含字符串字面量 " /* " */ // 无效语法
    return 0;
}

问题 :虽然字符串内的 /* / 不会被视为注释,但注释内包含未转义的引号可能导致语法错误(如示例中的 " / ")。

错误示例5:注释干扰预处理指令

复制代码
#include <stdio.h>

#define DEBUG 1

int main() {
    #if /* DEBUG */ 1 // 错误:注释导致预处理指令不完整
        printf("Debug mode enabled\n");
    #endif
    return 0;
}

问题 :注释会干扰预处理指令的解析,导致 #if 条件不完整或无效。

相关推荐
程序猿追5 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓5 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播5 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
Navigator_Z5 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
himobrinehacken6 小时前
取模运算的汇编奥秘揭秘
c语言·安全
墨云安全6 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠6 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y6 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
jimy18 小时前
c++的 Type Traits (一)
开发语言·c++
Web极客码9 小时前
Python Ollama 本地 Agent 入门与订单查询实践
开发语言·jvm·python