1.变量的声明还可以紧跟在任何其他标识符复合语句开始的左花括号之后。以这种方式声明的变量可以隐藏程序块外与之同名的变量,他们之间没有任何关系,并在与左花括号匹配的右花括号出现之前一直存在。
2.在不进行显式初始化的情况下,外部变量和静态变量都将被初始化为0,而自动变量和寄存器变量的初始值则没有定义(即初值为无用的信息数据)
#include<stdio.h>
2
3 int main()
4 {
5 int i = 0,
int j = 5; //此j和for内定义的j没关系
int k; //默认初始化为0
6 for (i=0; i<2; i++)
7 {
8 int j = 3;
9 printf("%d\n",j);
10 }
11 printf("%d\n",j);
printf("%d\n",k);
12 }
输出:3
3
5
0
3.宏定义应该适当使用圆括号。
#define square(x) (x)*(x)//加入不加括号,当用aquare(z+1)调用宏时会错
4.可以通过#undef指令取消名字的宏定义,这样做可以保证后续调用的调用时函数调用,而不是宏调用。
5.
一个调试打印宏
#define dprint(expr) printf(#expr " = %s\n",expr)
eg:dprint("hello")
6.Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出”标准输入”的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按”字面含义”解读下一个输入,要是想按”字面含义”输入Ctrl-V,连续输入两次就行了。