From 713de08093412db1f5380a98b92e7e380696891b Mon Sep 17 00:00:00 2001
From: hairrrrr <781728963@qq.com>
Date: Thu, 13 Feb 2020 22:45:12 +0800
Subject: [PATCH] 2-13
---
MOOC/detail/programing structure.md | 102 ++++++++++++++++++++++++----
1 file changed, 90 insertions(+), 12 deletions(-)
diff --git a/MOOC/detail/programing structure.md b/MOOC/detail/programing structure.md
index e11b1e1..48f1a81 100644
--- a/MOOC/detail/programing structure.md
+++ b/MOOC/detail/programing structure.md
@@ -275,12 +275,14 @@ void g(void) {
- 最好的做法是**返回传入的指针**
说了这么多,总结一句话
+
###### 尽量避免使用 全局变量 和 静态本地变量
+
-
+

-
???
+
???
@@ -321,18 +323,55 @@ int main(void) {
}
```
现在,我们打开我们的虚拟机,进入 Linux 系统。
-
-
+
+
+
+
+
1.创建一个 c文件
+
+
+
+
+
+
+
+
2.写一个简单的带宏的 c程序
+
+
+
+
+
+
+
+
+
3.这时后我们成功创建了一个 c文件
+
+
+
+
+
+
+
+
+
4.编译c文件,并保留中间文件
+
+
-
-
现在多出来了 4 个文件,蓝色的是文件夹,我们不去管它,绿色的是可执行文件,类似 windows 的 .exe 文件
现在我们主要关注这 3 个中间文件
-
+
+
+
+
+
文件详细情况
+
+
+
一个 c文件编译的过程文件变化是这样的:
+
>`.c `(处理编译预处理指令)-> `.i `(产生汇编代码)-> `.s`(汇编生成目标文件) -> `.o`(链接等) -> `a.out `
>
@@ -343,11 +382,41 @@ int main(void) {
这种替换是**简单的文本替换**,我们再试试其他的替换方式:
-
-
+
+
+
+
+
替换字符串
+
+
+
我们再试试这样,定义宏的时候 不带双引号:
-
-
+
+
+
+
+
+
FRORMAT 同样被替换了
+
+
+
+
+
+
+
+
编译器给了 warning
+
+
+
+
+
+
+
+
+
FORMAT并没有被替换
+
+
+
因此可知,**被 `" "`扩起来的字符串 宏 是不会替换的**
###### 总结
@@ -397,7 +466,9 @@ Feb 11 2020 04:12:57
你们在熟睡,而我还在给你们写教学,关注我/点个赞/转发 不过分吧~

+
#### 带参数的宏
+
- `#define cube(x) ( (x) * (x) * (x) )`
例如:
@@ -440,7 +511,14 @@ int main(void) {
```
为什么会这样呢?我们不妨来看一下,`.i`文件内部:
-
+
+
+
+
+
注意运算顺序
+
+
+
**定义带参数的宏的原则**
- 一切都要有括号
- 整个值有括号