c复习day01

c语言编译四步骤

预处理 : gcc -E hello.c -> hello.i

  • 头文件展开:#include <stdio.h> :预处理时将stdio.h拷贝过来
  • 带#号的命令就是预处理指令
  • 删除注释:注释的两个方法: //和/**/
  • 宏定义的替换:#define PI 3.14:定义了一个宏PI和3.14等价,当我们预处理的时候会将PI替换成为3.14
  • 需要注意的地方是我们不可以将3.14后面加上;因为做的是一种等价的替换
  • 在预处理的过程中并不会检查语法错误
  • 条件编译:#if 0 -> #endif(条件不成立);#if 1 -> #endif(条件不成立)

编译 :gcc -S hello.i -> hello.s

  • 编译会检查语法错误;
  • 将预处理文件编译生成为汇编文件

汇编 :gcc -c hello.s -> hello.o

  • 将汇编文件编译为二进制文件

链接 :gcc hello.o -> hello.exe

  • 设置运行环境,堆栈等,链接其他库

Helloworld程序分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//预处理指令,在预编译时处理
//包含stdio.h文件
//斜杠是注释,
//符号后面加上()表示这是一个函数
//main():main函数也叫主函数,在程序中有且只有一个main函数
//程序从main函数开始执行
//int 表示main函数在结束之后返回值的类型
//return 0;表示返回值为0
//在{}中是函数体,每条代码需要以分号结尾
//printf是一个库函数,括号中是一个参数
#include <stdio.h>
int main(void)
{
printf("Hello world\n");
return 0;
}

system 库函数

  • 作用:在程序中启动另一个程序
  • 参数:待启动程序的路径名
  • 如果这个程序系统可以找到不用加路径
  • window路径以\来表示或者连个 \ \
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
system("mspaint");
printf("Hello world\n");
system("pause")//用来等待用户输入
return 0;
}

寄存器缓存和cpu之间的关系

  • 缓存事实上和内存相似,只是距离cpu比较近且速度要比内存快的多
  • cpu -> 寄存器 -> 缓存 -> 内存

调试

  • 设置断点,使程序暂停
  • 比较重要的:监视器,内存,自动窗口

vs中出现4996

  • 只需要加上
    • #define _CRT_SECURE_NO_WARNINGS
    • #pragma warning(disable:4996)
  • 移动我们需要的语句只需要使用alt加上方向键
你的支持是我最大的动力!
0%