关键字
变量的作用域
修饰类型 long short signed unsigned const volatile
存储类型 auto register static extern
编译器的优化,在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。
当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。
当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。
volatile 修饰的变量,直接从原始内存地址取值,不从寄存器取值。
volatile(多线程都修改这个变量时,volatile修饰这个变量,读取变量的时候,强制从内存中更新最新值,获取到最新改变的值。)
[类型修饰符] 类型定义符 [存储类型] 变量名 [= 变量的初始这];
signed int auto a = 0;
long
long long
short
int
auto register static extern
auto register,只能在函数内使用。
static 可在函数内,也可在函数外。
extern 在函数外
全部变量,局部变量
当全局变量和局部变量一样的时候,局部变量优先级高于全局变量,局部覆盖全局变量。
所以尽量不要让全部变量和局部变量名称一致,如果局部变量的值一直在变化的话,全局变量的值也会收到影响。
所以一般全局变量的命名是g_XXX, 局部变量的命名是l_XXX。
scanf 系统函数