读《C专家编程》总结(一)

1.数组下标从0开始而不是1开始!

即a[0]——a[99],千万不要出现a[100]的情况。


2.auto关键字是个就是个摆设,除非你想在定义的时候使代码对齐好看点

如:register int a = 1;

     auto int b = 2;

     static c = 3;


3.表达式中数组名可以"看做"是指针

但记住,数组名并不是指针,有很多区别。


4.不允许函数嵌套。


5.注意宏定义中的空格!

#define a(n)  a_expanded(n)


则a(x);——被扩展为:a_expanded(x);


而:

#define a"此处有空格"(n)  a_expanded(n)

a(x);

——被扩展为:(x)  a_expanded(x)


6.ANSI C标准对一个能够成功编译的程序的最小长度做了限制

每一个ANSI C编译器必须能够支持:

  • 在函数定义中形参数量的上限至少可以到达31个。
  • 在函数调用时实参数量的上限至少可以达到31个。
  • 一条源代码里知识可以有509个字符。
  • 在表达式中至少可以支持32层嵌套的括号。
  • long int的最大值不得小于2 147 483 647(就是说long型整数不得低于32位)

7.const最有用之处就是用来限定函数的形参,const定义的并不是真正的常量;
证明:
const int MAX = 10;
int A[MAX];//——定义出错

const修饰指针时注意:
const int * p;p指向的内存中的数据不能被改变
int const * p;p指向的内存中的数据不能被改变
int * const p;p指向的内存中数据可以被改变,但p本身不能被改变
const int * const p;p本身不能改变,p所指向的内存中的数据也不能被改变

8.sizeof返回无符号整形!sizeof不是函数!
怎么证明sizeof 不是函数?
int a;
sizeof(int) = 4;
sizeof(a) = 4;
sizeof a ——也是4  不需要括号!

此时要注意:
sizeof int——错误!此时int  把sizeof当成int的修饰词;比如  signed int ,  register int 。。。

9.尽量不要在你的代码中使用无符号整形,以免增加不必要的复杂性!最好使用位段和二进制掩码时使用无符号数;

10.数据类型的转换!一定要注意 读《C专家编程》总结(一)_第1张图片

另外添加一个例题:
        int j = -2;
	unsigned int i = 1;
	if((i + j) >=0)
	{
		printf("i + j > 0 \n");
	}
	else
	{
		printf("i + j < 0 \n");
	}


看看是什么结果。

你可能感兴趣的:(编程,C语言,宏)