c语言公共函数调用逻辑 c语言函数调用原理( 四 )


const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
volatile :与const合称“cv特性” , 指定变量的值有可能会被系统或其他进程/线程改变 , 强制编译器每次从内存中取得该变量的值
2 流程控制关键字
A 跳转结构(4个)
return :用在函数体中,返回特定值(或者是void值 , 即不返回值)
continue :结束当前循环,开始下一轮循环
break :跳出当前循环或switch结构
goto :无条件跳转语句
B 分支结构(5个)
if :条件语句
else :条件语句否定分支(与if连用)
switch :开关语句(多重分支语句)
case :开关语句中的分支标记
default :开关语句中的“其他”分治,可选 。
C 循环结构(3个)
for :for循环结构,for(1;2;3)4;的执行顺序为1-2-4-3-2...循环,其中2为循环条件
do :do循环结构 , do 1 while(2); 的执行顺序是 1-2-1...循环,2为循环条件
while :while循环结构,while(1) 2; 的执行顺序是1-2-1...循环 , 1为循环条件
以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环 。
[编辑本段]新标准
在ANSI标准化后 , C语言的标准在一段相当的时间内都保持不变 , 尽管C++继续在改进 。(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本 。但是这个版本很少为人所知 。)标准在90年代才经历了改进 , 这就是ISO9899:1999(1999年出版) 。这个版本就是通常提及的C99 。它被ANSI于2000年三月采用 。
在C99中包括的特性有:
对编译器限制增加了,比如源程序每行要求至少支持到 4095 字节,变量名函数名的要求支持到 63 字节 (extern 要求支持到 31)
预处理增强了 。例如:
宏支持取参数 #define Macro(...) __VA_ARGS__
使用宏的时候,参数如果不写 , 宏里用 #,## 这样的东西会扩展成空串 。(以前会出错的)
支持 // 行注释(这个特性实际上在C89的很多编译器上已经被支持了)
增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex 这样的类型
支持 : : % % %: %:%:,等等奇怪的符号替代
支持了不定长的数组 。数组的长度就可以用变量了 。声明类型的时候呢,就用 int a[*] 这样的写法 。不过考虑到效率和实现,这玩意并不是一个新类型 。所以就不能用在全局里 , 或者 struct union 里面,如果你用了这样的东西,goto 语句就受限制了 。
变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=0;i100;++i) 就是说,int i 的声明放在里面,i 只在 for 里面有效 。(VC没有遵守这条标准,i 在 for 外也有效)
当一个类似结构的东西需要临时构造的时候 , 可以用 (type_name) 这有点像 C++ 的构造函数
初始化结构的时候现在可以这样写:
structhehe[] = ;
structhehe =// 3,4 是对 .c,.d 赋值的
字符串里面,\u 支持 unicode 的字符
支持 16 进制的浮点数的描述
所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的 I64) 对应新的 long long 类型 。
浮点数的内部数据描述支持了新标准,这个可以用 #pragma 编译器指定
除了已经有的 __line__ __file__ 以外,又支持了一个 __func__ 可以得到当前的函数名
对于非常数的表达式,也允许编译器做化简
修改了对于 / % 处理负数上的定义,比如老的标准里 -22 / 7 = -3, -22 % 7 = -1 而现在 -22 / 7 = -4, -22 % 7 = 6

推荐阅读