我的C语言复习笔记(记录我容易忘记的知识点)

1:gcc

        gcc   -E        预处理命令,生成 .i 文件

        gcc   -S        编译,编译为  .s文件

        gcc   -c        把预处理,编译,汇编都做了,但是不链接;生成.o  文件

        gcc  -o        链接 ,指定输出文件,如果不指定文件,就采用默认方法

        gcc   -I         从指定路径下寻找头文件

                -l         链接时搜索该库,最好是-llibrary,紧跟库名,因为分开的方式只为了兼容POSIX,会搜索固定目录和-L指定的目录,

                -static     静态链接

                -share        可以共享,被用来链接

        一般常用-c选项,先编译在链接。因为如果项目多,修改了其中一个文件的话,其他文件都要重新编译后链接。

2: ’#‘ 的作用

#define A(X)    #X    //相当于把A(X)字符串化为x    

#define B(x)    Mydata##x //相当于加了个前缀,B(x)变为 Mydatax

    3:类型修饰符

auto:

register:

          定义快速访问的变量,把这个变量放在寄存器中,但是他不能保证一定能放进去,毕竟寄存器资源很宝贵

static:

        限制作用域,变量或函数的生命周期在程序执行期间都存在

        修饰局部变量,只对函数内部可见,只初始化一次

        修饰函数外部变量,只对该文件可见,链接时不会被多次定义

        修饰函数

extern:

        外部申明

const:

        常量修饰符,变量只读

volatile:

易变的(可见性):

          比如有两个线程在执行,一个读变量a,一个写,按照写回策略,线程1可能把数据写到缓存,线程2可能从主存读。它的作用就是告诉cpu不要把变量写到缓存,每次读写数据都从主存里读写,保证数据一致。

不可优化的:告诉编译器不要优化

 顺序执行的:相关的代码先执行

int i;// 1
int j;// 2
i++;// 3
j++;// 4
//如果使用volatile,按1324执行。不使用是依次执行。

注意,volatile不具备原子性,原子性需要原子操作或者锁来实现,原子性就是程序执行时,其他程序要么看到它还未执行,要么已经执行完,不能看到中间执行的结果。

4:位运算

        << 左移,相当于*2,空位填0

        >>右移,相当于除以2,空位与符号相关,正数填0,负数填1

        &、 | 、^ 与、或、异或

        &可以用来清零或者保存某几位数据,如

int a = 0x1234;
int b = a & 0xff00;//去出后两位

        ~ 取反,逐位运算

        |   可以用来设置高电平,如

int a;
a=a | (0x1<<5);//设置第五位为高电平

5、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值