快速而又安全删除(注释)代码
if 0
statements
endif
转义字符 \
\ddd
ddd代表1~3个数字,表示8进制数值所代表的数字。
#######define与typedef
define的副作用
#define ptr_to_char char*
ptr_to_char a,b //a类型为char*,b类型为char`
而typedef可正确定义
typedef ptr_to_char char*
ptr_to_char a,b a,b类型均为char*
```
######static关键字
用于函数定义或代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响。
用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。
######位的操纵
把指定位bit_number置1
```
value = value | 1 << bit_number;
```
把指定位bit_number置0
```
value = value & ( 1 << bit_number );
```
测试指定位bit_number
```
value & 1 << bit_number;
```
######EOF必须使用int类型的变量接收
stdio.h中规定EOF=-1,超出了char类型的表示范围。
######sizeof不对表达式进行求值
```
int a=1,b=10;
sizeof(a = b + 1);
printf("%d",a);
```
输出结果为1,sizeof(a = b + 1)并没有向a赋任何值。
######逗号操作符的运用
```
a = get_value();
count_value(a);
while (a > 0) {
...
a = get_value();
count_value(a);
}```
利用逗号操作符可以改写为
```
while (a = get_value(), value_count(a), a > 0) {
...
}
```
######左值与右值
左值代表一个位置(地址),右值代表一个值。
######函数的调用顺序
```
f() + g() + h()
```
该段代码尽管左边的加法运算必须在右边的加法运算之前执行,但对于函数调用的顺序,并没有规则加以限制。如果函数执行具有副作用,则可能由于函数调用顺序不同而产生不同结果。例如:
```
int fun() {
static int counter = 1;
return ++counter;
}
int main() {
int answer;
answer = fun() - fun() * fun();
printf("%d\n", answer);
}
```
网友评论