C语言学习笔记(一)从helloworld了解计算机和编译器的工作原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

一、计算机的工作方式简介

在这里插入图片描述
CPU——执行指令
内存——指令仓库
我们程序员做的事情就是写一些指令,通过地址线和数据线让CPU执行内存中的指令

二、人类语言的翻译官——编译器

1.编译器的诞生

在这里插入图片描述

2.C语言编译器

在这里插入图片描述
C语言的编译器分为两大阵营:
微软阵营:MSVC
开源组织阵营GNU:gcc
Linux系统上:gcc
Windows系统上:minGW

3.编译器工作流程

在这里插入图片描述

1.预处理阶段

第一个阶段为预处理阶段
编译器会识别#开头的代码,对其进行预处理
在这里插入图片描述

#include<stdio.h>
#define ABC 10

int main() {
	int a = ABC;
```c
#ifdef DEBUG
	printf("hello,world!\n");
#else
	printf("--------");
#endif // !DEBUG
	return 0;
}

上述代码中的语句int a = ABC;经过预处理后会变成int a = 10;
在这里插入图片描述
打开a.i文件:ABC已经被替换为10
在这里插入图片描述

#ifdef DEBUG
	printf("hello,world!\n");
#else
	printf("--------");
#endif // !DEBUG

这部分代码属于条件编译的内容
执行一个printf(“hello,world!\n”);要耗费CPU的资源和时间,在开发中一般是用于让程序员看到程序运行到了这一步,而在实际产品中这一步毫无意义,这时候就可以用条件编译。
对于上述代码段,正常执行运行结果如下图,输出了else下面的部分
在这里插入图片描述
而要想输出hello,world,只需要 -D就可以,如下图所示:
在这里插入图片描述
关于条件编译还有如下应用场景:
如果一个C源程序在不同计算机系统上系统上运行,而不同的计算机又有一定的差异。如:

我们有一个数据类型,在windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这

样往往需要对源程序作必要的修改,这就降低了程序的通用性,可以用一下的条件编译:

#ifdef WINDOWS
#define MYTYPE long
#else
#define MYTYPE float
#define

如果在windows上编译程序,则可以在程序的开始加上
#define WINDOWS

这样则编译下面的命令行:
#define MYTYPE long
否则编译:
#define MYTYPE float

2编译—汇编—链接

在这里插入图片描述
人能看懂的代码 ------编译------ 汇编语言
汇编语言 ------汇编------机器指令集
机器指令集------链接 确定数据的地址 ------ 可执行文件
a.c—预处理—>a.i—编译—>a.s—汇编—>a.o—链接—>build.exe
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值