C学习过程记录
文章目录
- 编译流程
- 变量
- 变量的定义:
- 存储类型说明:
- 词法符号
- 标识符
- 运算符
编译流程
- 预处理(头文件的展开,宏定义的同义替换) -E
- 汇编(C语言源程序—>汇编语言) -S
- 编译(汇编语言—>机器语言) -c
- 链接(链接库)-o
- 例如:
gcc -E demo.c -o demo.i//demo.i 文件为预处理之后的文件
gcc -S demo.i -o demo.s//demo.s 文件为汇编后的文件
gcc -c demo.s -o demo.o//demo.o 文件为编译后的文件
gcc demo.o -o 可执行文件的文件名 // 链接
变量
在一段程序中可以随着程序的运行发生变化的数据
变量的定义:
存储类型 数据类型 变量名(标识符);
存储类型说明:
auto:自动类型(默认缺省)
例如:auto int data;//int data;(等价)static:静态存储类型- 对局部变量使用:
- 延长变量的生命周期(周期延长到整个程序结束)
- 变量的初始化只做一次
- 对全局变量使用:
- 限定全局变量的文件作用域
(只能作用于当前文件,不能被外部引用)
- 限定全局变量的文件作用域
- 对函数使用:
- 限定函数的文件作用域
(只能作用于当前文件,不能被外部引用)
- 限定函数的文件作用域
- 对局部变量使用:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>int b;
void func()
{// 变量的生命周期为函数的调用开始到函数的调用结束// int c = 2;// static 修饰的局部变量生命周期结束为整个程序的结束,static修饰的变量只会初始化一次static int c = 2c = c + 1;printf("c = %d\n",c);
}
int main(int argc, char *argv[])
{int a;func();func();return 0;
}
extern:外部引用类型- 引用外部文件(全局变量,函数)
// demo 05
int cc = 100;// demo 04
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
extern cc;
int b;
void func()
{// 变量的生命周期为函数的调用开始到函数的调用结束// int c = 2;// static 修饰的局部变量生命周期结束为整个程序的结束,static修饰的变量只会初始化一次static int c = 2c = c + 1;printf("c = %d\n",c);
}
int main(int argc, char *argv[])
{int a;printf("cc = %d", cc); // 结果是ccreturn 0;
}
register:寄存器类型- 存储设备:外存(固态硬盘),内存(内存条),寄存器
- 速度非常快,但是不能所有变量都定义成寄存器类型,寄存器数量有限
词法符号
标识符
命名规则:
- 只能由字母、数字、下划线组成
- 不能以数字开头
- 不能和32个关键字重名
运算符
- 算数运算符:
+,-,*,/,%
练习:取出一个四位数的个位数,十位数,百位数,千位数 - 赋值运算符:
=,+=,-=,*=… - 逻辑运算符:
&&(与),||(或),!(非)&&:只要有一个事件为假则整个运算结果为假||:只要有一个事件为真则整个运算结果为真- 短路法则:在一次逻辑与或者逻辑或的运算中,第一个运算式已经可以使得整个运算的结果
- 位运算符:
&(位与),|(位或),~(按位取反),^(异或),>>(右移),<<(左移) - 关系运算符:>,<,==,>=,<=,!=
- 注意:关系运算会做运算动作,结果为真值为1,结果为假值为0
- sizeof运算符:计算数据类型、变量所占空间大小(单位:字节)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>int main(int argc, char *argv[])
{unsigned char a = 0xd7;//交换unsigned char b = (a>>4)&0x0f;unsigned char c = (a<<4)&0xf0;a = b|c;printf("a = %x\n",a);return 0;
}
