zoukankan      html  css  js  c++  java
  • c 陷阱与缺陷(一)

    1.程序在设计时,往往得出正确的结果,但是它并不是程序员自己想要的。

      例如: 

          printf("hello world!")

              编译器进行编译时不会出现任何问题,但是结果:

              

                 提示竟然出现在!的后面。因此   n   的使用变的尤为重要。

    2. = 和 ==

    while( c =  '  ' ||  c == '    '   ||  c ==  '  n' )

    这段程序程序员想表达的意思 当 c 为 空格、制表符、换行时,执行子程序。但是如果将== 写成 = 时,由于赋值运算符的优先级低于逻辑运算符。

    ‘  ’ 的ascii值为32,所以 c 永远不为0,则进入死循环。

      1 #include<stdio.h>
      2 int main()
      3 {
      4         char ch;
      5         scanf("%c",&ch);
      6         while(ch = ' ' || ch=='	'|| ch== '
    ')
      7         {
      8                 printf("******
    ");
      9                 printf("%d
    ",ch);
     10         }
     11         return 0;
     12 }
    

    结果:
                           

    3.编译器语法分析中的贪心法

    编译器将程序分解成符号的方法是:从左到右一个一个字符的读入,如果该字符可能成为一个符号,则读入下一个字符,判断这两个字符是否为符号,如果是接着判断,直到不可能组成符号为止。

    y= x/*p   /*  *p is pointed  */;  编译器会解析成y=x;

      1 #include<stdio.h>
      2 int main()
      3 {
      4         int a=10;
      5         int *p=&a;
      6         int y;
      7         y=a/*p  /*    ********** */;
      8         printf("%d
    ",y);
      9 }
    

         

    正确写法应该(*p)加括号,或/ 与  *  之间加空格。

    4.  整形的数如果 int  a=076;    // 会被编辑器解析成八进制数

      1 #include<stdio.h>
      2 int main()
      3 {
      4         int a=076;
      5         printf("%d
    ",a);
      6         return 0;
      7 }
    


          

    5. 字符与字符串:  用单引号引起的一个字符实际上代表一个整数,用双引号引起的字符串,代表一个指向无名数组的起始字符的指针,该数组被  双引号之间的字符 和 一个

                               额外的二进制字符‘’初始化

    6.嵌套注释:   

     / */**/"*/"/*"/**/
    允许嵌套   “/*”
    不允许嵌套 “*/”
    
    
    
    
    /*/*/0*/**/1
    允许嵌套 1
    不允许嵌套 0*1
    
    
    
    
    



     1 #include<stdio.h>
      2 int main()
      3 {
      4         printf("%s
    ",/*/**/"*/"/*"/**/);
      5         printf("%d",/*/*/0*/**/1);
      6         printf("
    ");
      7         return 0;
      8 }


  • 相关阅读:
    centos 7 服务器网卡做bond
    python 函数参数
    python 文件操作
    Linux 150命令之 文件和目录操作命令 cd pwd cp mv touch
    创建https证书
    Linux 150命令之 文件和目录操作命令 ls
    zabbix 2.2.2 安装部署
    NTP错误总结
    NTP时间服务器
    150命令之线上查询及帮助命令 man hellp
  • 原文地址:https://www.cnblogs.com/riasky/p/3508655.html
Copyright © 2011-2022 走看看