📜  C / C++中的错误

📅  最后修改于: 2021-05-25 22:05:32             🧑  作者: Mango

错误是用户执行的非法操作,导致程序异常工作。
在编译或执行程序之前,通常不会发现编程错误。一些错误会阻止程序被编译或执行。因此,应在编译和执行之前消除错误。
可以将最常见的错误大致归纳如下。

错误类型

  1. 语法错误:违反C / C++语法编写规则时发生的错误称为语法错误。此编译器错误表明在编译代码之前必须先修复一些问题。所有这些错误都由编译器检测到,因此称为编译时错误。
    最常见的语法错误是:
    • 缺少括号( } )
    • 在不声明变量的情况下打印变量的值
    • 缺少这样的分号:
      // C program to illustrate
      // syntax error
      #include
      void main()
      {
          int x = 10;
          int y = 15; 
            
          printf("%d", (x, y)) // semicolon missed
      }
      

      错误:

      error: expected ';' before '}' token
    • 基本构造的语法写错了。例如:while循环
      // C program to illustrate
      // syntax error
      #include
      int main(void)
      {
          // while() cannot contain "." as an argument.
          while(.) 
          {
              printf("hello");
          }
          return 0;
      }
      

      错误:

      error: expected expression before '.' token
           while(.) 

      在给定的示例中,while循环的语法不正确。这会导致语法错误。

  2. 运行时错误:成功编译后在程序执行(运行时)期间发生的错误称为运行时错误。最常见的运行时错误之一是被零除,也称为除法错误。这些类型的错误很难找到,因为编译器没有指向发生错误的行。
    为了获得更多的理解,请运行下面给出的示例。
    // C program to illustrate
    // run-time error
    #include
    void main()
    {
        int n = 9, div = 0;
        
        // wrong logic
        // number is divided by 0,
        // so this program abnormally terminates
        div = n/0;
          
        printf("resut = %d", div);
    }
    

    错误:

    warning: division by zero [-Wdiv-by-zero]
         div = n/0;

    在给定的示例中,存在除以零的误差。这是运行时错误的示例,即运行程序时发生的错误。

  3. 链接器错误:编译后,我们使用Ctrl + F9键(RUN)将不同的对象文件与main对象链接在一起时,会发生这些错误。这些是无法生成程序的可执行文件时生成的错误。这可能是由于错误的函数原型,不正确的头文件引起的。最常见的链接器错误之一是编写Main()而不是main()
    // C program to illustrate
    // linker error
    #include
      
    void Main() // Here Main() should be main()
    {
        int a = 10;
        printf("%d", a); 
    }
    

    错误:

    (.text+0x20): undefined reference to `main'
    
  4. 逻辑错误:在编译和执行程序时,如果给出某些输入值,则无法获得所需的输出。这些类型的错误提供了不正确的输出,但看起来没有错误,被称为逻辑错误。这些是编程初学者最常见的错误之一。
    这些错误仅取决于程序员的逻辑思维,很容易检测我们是否遵循执行路线并确定程序为何采用该执行路径。
    // C program to illustrate
    // logical error
    int main()
    {
        int i = 0;
      
        // logical error : a semicolon after loop
        for(i = 0; i < 3; i++);
        {
            printf("loop ");
            continue;
        } 
        getchar();
        return 0;
    }
    

    无输出

  5. 语义错误:当程序中编写的语句对编译器没有意义时,将发生此错误。
    // C program to illustrate
    // semantic error
    void main()
    {
      int a, b, c;
      a + b = c; //semantic error
    }
    

    错误

    error: lvalue required as left operand of assignment
     a + b = c; //semantic error
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。