C语言新手笔记

新手上路,难免遇到各种各样的问题。本文所收录,就是我遇到的,容易忽视的一些问题。

新手上路,难免遇到各种各样的问题。本文所收录,就是我遇到的,容易忽视的一些问题。

1. 常数不可随便写。

int a=14; 
int b=014; //前导零,是八进制的14
float a=3/2;   //得到1
float b=3/2.0; //得到1.5

2. 不要随便移项……

unsigned int x=4;
if (x > 5)
    puts("x>5");
if (x - 5 > 0)
    puts("x-5>0");
//结果将是,输出 "x-5>0"

注意到 x 的类型是 unsigned,(x-5) 的值还是正数。

3. 多一个分号?

int i, sum;
for(i=0; i<=10; i++);
{
    sum += i;
}
printf("%d", sum);
//输出并不是设想中的55,而是11。

你发现了吗,for 一行后面多写了一个分号。有的编译器会对类似情况给出 warning 曰“空的受控语句”,有的则不会,火眼金睛才能发现问题所在。

4. 搞不懂的自增

int a=2;
a/=a++;
//问此时 a 的值

这绝不是 a++ 和 ++a 的区别那么简单。事实上不同编译器会给出不同结果:gcc 3.4 给出 a==1,Turbo C 3.0 和 VC++ 11.0 则给出 a==2。从汇编码中能看出些端倪,但更深入的研究就需要对编译器的理解了。

这个故事告诉我们,不要随意使用自增(自减)运算符,特别是当被执行自增(自减)的变量在表达式中多次出现的时候。

5. 更多编译器相关的代码

int a=0;
printf("%d %d %d", a++, a++, a++);

1 thought on “C语言新手笔记”

发表评论

电子邮件地址不会被公开。 必填项已用*标注