2024年10月9日 11:12

This commit is contained in:
许大仙 2024-10-09 03:12:24 +00:00
parent 550c3966c8
commit b04a2ecf24
2 changed files with 32 additions and 4 deletions

View File

@ -795,7 +795,7 @@ int main(){
> * ① 上述的情况,在单片机和嵌入式领域更加常见。 > * ① 上述的情况,在单片机和嵌入式领域更加常见。
> * ② 总体而言C 语言具有开放性,并且要适应不同的硬件平台,这使得不同厂商可以根据自己的需求来进行个性化开发/定制。 > * ② 总体而言C 语言具有开放性,并且要适应不同的硬件平台,这使得不同厂商可以根据自己的需求来进行个性化开发/定制。
* 这也导致了一个非常棘手的问题,有的编译器遵守较新的 C 语言标准,有的编译器只能遵守较老的 C 语言标准,有的编译器还进行了很多扩展比如: * 这也导致了一个非常棘手的问题,有的编译器遵守较新的 C 语言标准,有的编译器只能遵守较老的 C 语言标准,有的编译器还进行了很多扩展比如:
* GCC、LLVM/Clang 更新非常及时,能够支持最新的 C 语言标准。 * GCC、LLVM/Clang 更新非常及时,能够支持最新的 C 语言标准。
* MSVC 更新比较缓慢迟迟不能支持新标准例如VC6.0、VS2010 都在使用 C89 标准VS2015 部分支持 C99 标准。 * MSVC 更新比较缓慢迟迟不能支持新标准例如VC6.0、VS2010 都在使用 C89 标准VS2015 部分支持 C99 标准。

View File

@ -65,7 +65,7 @@
# include <stdio.h> # include <stdio.h>
``` ```
* ③ 预处理指令都是一行的,除非在行尾使用反斜杠,将其折行。 * ③ 预处理指令都是一行的,除非在行尾使用反斜杠,将其折行,但强烈不建议这么干
```c ```c
#include <std\ #include <std\
@ -87,16 +87,44 @@
```c ```c
int main () { int main () {
// 一般不允许写在这里 // 一般不允许写在这里
#include <stdio.h> #include <stdio.h> // [!code warning]
return 0; return 0;
} }
``` ```
## 1.4 为什么 C 语言需要预处理?
* C 语言并没有一个官方机构,也不属于哪个公司,它只有一个制定标准的委员会,任何其他组织或者个人都可以开发 C 语言的编译器,而这个编译器要遵守哪个 C 语言标准,是 100% 遵守还是部分遵守,并没有强制性的措施,也没有任何约束。
> [!NOTE]
>
> - ① 各个厂商可以根据自己的利益和喜好来开发编译器。
> - ② 市场和用户的选择通常是推动编译器开发者遵循标准的主要动力。
* 并且,不同硬件平台之间也存在差异,这会导致内存管理方式、寄存器、指令集等都有所不同,为了确保 C 语言程序能在这些硬件平台运行,就得针对该平台开发/定制不同的编译器。
> [!NOTE]
>
> - ① 上述的情况,在单片机和嵌入式领域更加常见。
> - ② 总体而言C 语言具有开放性,并且要适应不同的硬件平台,这使得不同厂商可以根据自己的需求来进行个性化开发/定制。
* 这也导致了一个非常棘手的问题,有的编译器遵守较新的 C 语言标准,有的编译器只能遵守较老的 C 语言标准,有的编译器还进行了很多扩展,比如:
* GCC、LLVM/Clang 更新非常及时,能够支持最新的 C 语言标准。
* MSVC 更新比较缓慢迟迟不能支持新标准例如VC6.0、VS2010 都在使用 C89 标准VS2015 部分支持 C99 标准。
> [!NOTE]
>
> 微软官方给出的答复:最新的标准已经在 C++ 中支持了C 语言就没必要再重复了。
# 第二章:宏定义 # 第二章:宏定义
## 2.1 概述