1.goto语句
#include<stdio.h>
int main()
{
printf("Begin ....\n");
// goto Go;
printf("Continue ....\n");
Go:
printf("End ....\n");
}
输出结果
[root@localhost workplace]# ./goto
Begin ....
Continue ....
End ....
注意:goto语句程序本身也要运行。
2.优化控制结构
a.使用替换程序中的乘除法
加减法只占一个时钟周期,位运算和移位操作的执行速度和加减法接近。乘法需要5到6个时钟周期,除法执行最慢,大约需要50个时钟周期。
乘法都可以使用移位指令代替 a*13 = a<<3 + a +a<<2。除法则只有2的幂才能使用。
b.常量折叠
将常量结果计算好,但不易于阅读
c.使用数学公式代替
d.存储问题
x=x+1;
执行过程分三步
x+=1;
执行过程只有两步
e.分支优化,改变判断顺序
将判断可能性比较大的放在前面,减少判定次数
f.循环优化,一次性计算
对于循环中一次性计算,应当将其放置到循环外面
h.调用函数很费事,最后减少调用
i.不要将循环算子等高频率使用的变量设置为全局变量或者静态变量
3.全局变量,局部变量
局部变量存储在函数的栈上,栈消失,变量也消失
全局变量存储在固定的存储区
对于全局变量来说,如果一个全局变量未被初始化,其初始值有编译器自动设置为0。而局部变量存储在内存的堆栈中,定义之后,不会将其初始化为0,而是使用其占用内存空间原有的值,是一个随机值。
4.全局变量
a.c
#include<stdio.h>
double a;
void f()
{
a=-0.0;
}
b.c
#include<stdio.h>
void f(void);
int a = 123;
int b = 121;
int main()
{
f();
printf("a=%d,b=%d\n",a,b);
return 0;
}
在VS2010上运行结果为
Linux中结果
理由:运行f后,将4字节的a变成8字节,将b的值也清空
5.可变参数
int printf(const char* format,...);