mirror of
https://github.com/hairrrrr/C-CrashCourse.git
synced 2026-04-07 20:58:19 +08:00
2-13
This commit is contained in:
@@ -275,12 +275,14 @@ void g(void) {
|
||||
- 最好的做法是**返回传入的指针**
|
||||
|
||||
说了这么多,总结一句话
|
||||
|
||||
###### 尽量避免使用 全局变量 和 静态本地变量
|
||||
|
||||
<div align = "center">
|
||||
|
||||
|
||||

|
||||
|
||||
<p>???</p>
|
||||
<p>???</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -321,18 +323,55 @@ int main(void) {
|
||||
}
|
||||
```
|
||||
现在,我们打开我们的虚拟机,进入 Linux 系统。
|
||||

|
||||
|
||||

|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>1.创建一个 c文件</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>2.写一个简单的带宏的 c程序</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>3.这时后我们成功创建了一个 c文件</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>4.编译c文件,并保留中间文件</p>
|
||||
|
||||
</div>
|
||||
|
||||

|
||||
|
||||

|
||||
现在多出来了 4 个文件,蓝色的是文件夹,我们不去管它,绿色的是可执行文件,类似 windows 的 .exe 文件
|
||||
现在我们主要关注这 3 个中间文件
|
||||
|
||||

|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>文件详细情况</p>
|
||||
|
||||
</div>
|
||||
|
||||
一个 c文件编译的过程文件变化是这样的:
|
||||
|
||||
>`.c `(处理编译预处理指令)-> `.i `(产生汇编代码)-> `.s`(汇编生成目标文件) -> `.o`(链接等) -> `a.out `
|
||||
>
|
||||
|
||||
@@ -343,11 +382,41 @@ int main(void) {
|
||||
|
||||
这种替换是**简单的文本替换**,我们再试试其他的替换方式:
|
||||
|
||||

|
||||

|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>替换字符串</p>
|
||||
|
||||
</div>
|
||||
|
||||
我们再试试这样,定义宏的时候 不带双引号:
|
||||

|
||||

|
||||
|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>FRORMAT 同样被替换了</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>编译器给了 warning</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>FORMAT并没有被替换</p>
|
||||
|
||||
</div>
|
||||
|
||||
因此可知,**被 `" "`扩起来的字符串 宏 是不会替换的**
|
||||
|
||||
###### 总结
|
||||
@@ -397,7 +466,9 @@ Feb 11 2020 04:12:57
|
||||
你们在熟睡,而我还在给你们写教学,关注我/点个赞/转发 不过分吧~
|
||||
|
||||

|
||||
|
||||
#### 带参数的宏
|
||||
|
||||
- `#define cube(x) ( (x) * (x) * (x) )`
|
||||
|
||||
例如:
|
||||
@@ -440,7 +511,14 @@ int main(void) {
|
||||
```
|
||||
为什么会这样呢?我们不妨来看一下,`.i`文件内部:
|
||||
|
||||

|
||||
<div align = "center">
|
||||
|
||||

|
||||
|
||||
<p>注意运算顺序</p>
|
||||
|
||||
</div>
|
||||
|
||||
**定义带参数的宏的原则**
|
||||
- 一切都要有括号
|
||||
- 整个值有括号
|
||||
|
||||
Reference in New Issue
Block a user