上海发布
理解 C17🤔 的关键,是区分“标准规定的行为”和“某个编译器恰好允许的行为”。程序在本机能够编译,并不代表它符合标准;程序在某个版😎本的编译器上运行正常,也不代表换到其他平台后仍然可靠。
释放内存后继续访问属于释放后使用,释放同一地址两次属于重复释放。以上问题有时不会立即崩溃,反而可能在优化级别变化或运行环境变化后才暴露,因此不能用“目前没有出错”判断代码正确。
C17 并没有像 C11 那样引入大量醒目的新特性,它主要围绕缺陷修复、标准澄清和兼容性改进展开。因此,学习重点应放在 C11 基础、C🔮17 编译😎模式、未定义行为排查、资源管理和工程规范上,而不是把它当成一门完全不同的新语言。
实现定义行为则由具体实现选择结果,并且通常需要文档说明,例如某些整数类型的表示方式。可移植代码应尽量减少对实现细节的依赖,并对整数宽度、字节序、对齐要求和字符编码进行明确处理。
C 程序通⭐常经历预处理、编译、汇编和链接四个阶段。头文件主要提供声明和宏,源文件包含实现,链接器负责把多个目标文件与库组合起来。理解每个阶段,才能区分“语法错误”“类型错误”“重复定义”和“未找到符号”等不同问题。