C 中需要注意的问题!

1. 数据下标溢出问题  

  编译器不对数组下标做合法性检查。因此,编写程序时,如果下标值是从那些已知是正确的值计算得来,那么无需检查它的值;但是,如果下标是依据某种方法从用户输入的数据产生而来,那么使用前必须进行合法性检测,确保其不会越界。

2.typedef 与 #define

  使用typedef可以定义数据类型的新名字,这样,当你需要修改程序类某些数据的类型时,将减少工作量和错误率。

  #define 只是在编译时进行字面替换,某些情况可能会出现很难检测的错误。

    如:      typedef  char *  prt_to_char   //把标识符ptr_to_char作为指向字符的指针类型的新名字

        #define   prt_to_char_bad  char *  //编译时prt_to_char_bad被替换为char*

        prt_to_char a, b;   // 声明a, b是指向字符的指针变量

        prt_to_char_bad c, d;   //声明c是指向字符的指针变量, 而d是字符型变量

3.作用域、链接属性和存储类型

变量的位置变量类型存储位置作用域如果声明为static
所有代码块之外全局,其他源文件可以访问,其他源文件中声明时建议加上extern,用以标明访问此处的外部变量。静态存储区,初始化为0从声明处到文件尾 不允许从其他源文件访问
代码块起始处 局部变量堆栈,初始值无意义整个代码块存储在静态存储区,程序执行期间一直保持。也不能从其他源文件访问。当多次调用该函数时,上一次调用函数产生的值会传递给下一次调用。
函数头部形式参数堆栈整个函数不允许

 

 

  

 

 

 

 

 

 

 

4. switch (expression):  expression 的结果必须为整型值。

5.有符号数的右移操作不可移植!!!

6. EOF为整型, 输入EOF(在 Windows/MS DOS 系统下:新起一行,按住 ctrl ,然后再按下 z ;在 Unix/Linux 下: ctrl + d

             while (  ( ch = getchar() ) != EOF ) 

             这条语句在使用有符号集的机器上运行时,如果读取了一个值为\377的字节时,循环将终止,因为这个值截短再提升之后于EOF相等。   当运行在无符号字符集的机器上时,这个循环将永远不会终止!

7. C中没有boolean类型,0为false, 非0均为true。

8.中文输入法惹得祸

  编译提示:“程序中有游离的 \377”。 检查输入的字符,是否有中文输入法输入的。

 

转载于:https://www.cnblogs.com/hilnx/archive/2012/11/21/2781580.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值