1)优点:
2)缺点
**32个关键字:**auto、break、case、switch、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、typedef、unsigned、union、void、volatile(防止编译器优化)、while
9中控制语句: if-else、for、while、do-while、continue、break、switch、goto、return
34种运算符:
//导入一个文件,stdio.h是一个标准库,标准输入输出库 .h头文件
//<>表示导入系统文件
//""表示导入自定义文件
#include<stdio.h>
//两个斜杠表示注释,行注释,只能注释一行
/*
块注释
可以多行注释
注释内容不参与程序编译
*/
//int 数据类型,整型,出现在函数中,表示函数的返回值类型
//main 程序的主函数,程序有且只有一个主函数 ()里面表示函数的参数
//函数的参数可以有多个,使用逗号分隔
int main()
{
//{} 函数体
//printf 是stdio.h中系统提供的函数,表示在标准输出设备上打印字符串
//""表示字符串
//;表示一条语句的结束
// \n是一个转义字符,表示换行
printf("Hello World!\n");
//return 出现在其他函数中,表示函数结束;出现在main函数中,表示程序结束
//0表示函数的返回值类型,要和函数返回值类型对应
return 0;
}
gcc -o E:/C/hello.exe E:/C/hello.c # 前面是可执行程序,后面是源文件,源文件可以有多个
//在linux下,是:
gcc -o E:/C/hello.out E:/C/hello.c
调用系统的cmd命令。
#include<stdlib.h>
int system(const char* command);
功能:在已经运行的程序中执行另外一个外部程序
参数:外部可执行程序的名字
返回值:成功返回0,失败返回其他任意数字
#include<stdlib.h>
#include<stdio.h>
int main()
{
// cmd 命令:calc,计算器;notepad:记事本;mspaint:画图板
//system("calc");
//可以打开一个外部的程序,如果带路径,需要使用双斜杠\\,或者使用一个正斜杠/也可以
int value;
value=system("D:\\WeChat\\WeChat.exe");
printf("%d\n", value);
return 0;
}
C代码编译成可执行程序可分为四步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里不会进行语法检查
2)编译:检查语法,将预处理之后的文件编译成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:C语言写的程序是依赖各种库的,编译之后还需要把库链接到最终的可执行程序中去
预处理:gcc -E hello.c -o hello.i # 只进行
编译:gcc -S hello.i -o hello.s
汇编:gcc -c hello.s -o hello.o
链接:gcc hello.o -o hello.exe
gcc -o hello.exe hello1.c hello2.c
1)编辑时异常
2)编译时异常
3)运行时异常
外部存储设备(hello.exe) ? 保存 加载 \xleftrightarrow[保存]{加载} 加载 保存? 内存(代码区,数据区,栈区,堆区) ? 数据交互:总线 \xleftrightarrow{数据交互:总线} 数据交互:总线 ? 中央处理器(CPU:运算器,寄存器,控制器)
windows平台下,需要使用软件 Depends.exe
8位:A、B、C、D
16位:AX、BX、CX、DX
32位:EAX、EBX、ECX、EDX
64位:RAX、RBX、RCX、RDX
按与CPU的远近来分,离得最近的是寄存器,然后是缓存(CPU缓存),最后是内存
CPU计算时,先预先把要用到数据读到内存,然后再把即将要用的数据读到寄存器。
mov 移动
add 添加
push 压栈
pop 出栈
call 调用
eax 32位寄存器
简单的加法计算:
#include<stdio.h>
int main()
{
//数据类型,定义整型变量
int a;
int b;
int c;
__asm
{
mov a, 3
mov b, 4
mov eax, a
add eax, b
mov c, eax
}
printf("%d\n", c);
return 0;
}
代码编辑器、编译器、调试器、图形用户界面
整行复制:光标定位在该行任意位置,ctrl+c
整行剪切:光标定位在该行任意位置,ctrl+x
智能提示:ctrl+j
自动补全:tab
智能补全:alt+ → \rightarrow →
大小写转换:选中内容,ctrl+shift+u
整行代码上下移动:alt+上下方向键
格式化代码:ctrl+k+f
格式化代码:ctrl+i
注释、取消注释:ctrl+/
自动完成函数定义:alt+enter
编译,但不调试,运行:ctrl+r
编译,不运行:ctrl+b