📜  C99编程语言简介:第一部分

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

C991999年采用的C的ISO / IEC 9899:1999标准规范的另一个名称。本文主要通过与C89标准进行比较,重点介绍C99中添加的新功能。在C99标准的开发阶段,重新检查了C语言的每个元素,分析了使用模式,并预期了未来的需求。 C与C++的关系为整个开发过程提供了背景。最终的C99标准证明了原始标准的优势。

  1. 在C99中添加的关键字:
    • 内联: C99添加适用于函数的关键字内联。如果我们写内嵌数据类型函数名(PARAM)任何函数就意味着我们指定编译器优化调用该函数,即函数的代码将被内联,而不是所谓的扩大。

      例子:

      // C program to demonstrate inline keyword
        
      #include 
        
      inline int maximum(int a, int b)
      {
          return a > b ? a : b;
      }
        
      int main()
      {
          int x = 5, y = 10;
          printf("Maximum of %d and %d is %d",
                 x, y, maximum(x, y));
          return 0;
      }
      

      注意:某些编译器显示对maximum()的未定义引用。此内联功能很少用作关键字。

      上面的程序等效于以下程序

      #include 
        
      int main()
      {
          int x = 5, y = 10;
          printf("Maximum of %d and %d is %d",
                 x, y, (x > y ? x : y));
          return 0;
      }
      
      输出:
      Maximum of 5 and 10 is 10
      
      输出:
      Maximum of 5 and 10 is 10
      

      内联函数通过维护结构化,基于函数的方法来帮助我们创建有效的代码。

    • 限制:限制是仅适用于指针的类型限定符。最初,通过限制限定的指针是可以访问其指向的对象的唯一方法。仅当第二个指针基于第一个指针时,才可能发生另一个指针对对象的访问。

      我们使用限制限定符来限制对对象的访问。这些主要用作函数参数或在malloc()中。限制限定符从不更改程序的语义。

    • _Bool数据类型: _Bool数据类型是在C99标准中添加的,该标准存储0和1值。 _Bool是整数类型。

      注意: C++中的bool关键字和C中的_Bool是不同的。

      _Bool很少使用,取而代之的是C99定义了一个新的头文件stdbool.h ,该文件定义了三个布尔值,即true和false。

    • _Complex: C99添加了对通过_Complex和_Imaginary关键字对复数执行运算的支持。这些关键字为数字编程提供了更好的支持。

      _Complex中定义的类型:

      • 浮点数_Complex
      • 双_Complex
      • 长双_Complex
    • _Imaginary:如上所述,C99添加了对通过_Complex和_Imaginary关键字对复数执行运算的支持。这些关键字为数字编程提供了更好的支持。

      _Complex和_Imaginary中定义的类型:

      • 浮点数_Imaginary
      • 双_虚构
      • 长双_Imaginary

      就像在_Bool数据类型中讨论的一样,这些_Complex和_Imaginary并不经常使用。相反,我们使用头文件它由内置宏,复杂宏和虚构宏组成。

  2. 类型修饰符的添加 C99中添加的另一个重要方面是引入long long无符号long long类型修饰符。 long long int的范围是–(2 ^ 63 – 1)到+(2 ^ 63 –1)。 Unsigned long long int的最小范围是从0到+(2 ^ 64 –1)。这种long long类型允许64位整数作为内置类型支持。
  3. 数组的更改: C99向数组添加了两个重要功能:
    • 可变长度数组:在C89标准中,必须在数组声明时使用整数常量来指定数组大小,并且数组大小在编译时是固定的。在C99标准中,我们可以声明一个数组,其尺寸由运行时已知其值的任何整数表达式指定。这称为可变长度数组(VLA)
    • 包含类型限定符:在C99中,我们可以在数组声明期间在方括号内使用关键字static 。仅当在函数参数中声明数组时才应用此函数,即

      例子:

      int fun1(char arr[static 80])
      {
          // code
      }
      

      在上面的示例中,arr始终是指向80个元素的数组的指针,即arr确保指向包含至少80个元素的char数组的起始元素。如果在函数参数中声明了该数组,我们也可以在方括号内使用关键字strict,volatile和const。关键字restrict指定指针是访问对象的唯一初始方式。 const指出指针始终指向同一对象。允许使用volatile ,但没有意义。

      例子:

      #include 
      void fun(int a[static 10])
      {
          for (int i = 0; i < 10; i++) {
              a[i] += 1;
              printf("%d ", a[i]);
          }
      }
        
      int main()
      {
          int a[] = { 1, 2, 3, 4,
                      4, 4, 4, 4,
                      5, 5, 6, 7,
                      8, 9, 10 };
          fun(a);
      }
      
      输出:
      2 3 4 5 5 5 5 5 6 6
      
  4. 单行注释: C89标准不接受单行注释。 C99标准引入了单行注释,仅在需要简短说明时使用。这些注释以//开头,并运行到该行的末尾。

    例如:

    // First Comment
    int a; // another comment
    
  5. 标识符声明:
    根据C89标准,所有标识符都应在代码块的开头声明。如果中间需要其他标识符,则无法为该实例或时间声明。我们需要在开始时声明这一点。 C99更改了此规则,因为我们可以随时在代码中声明标识符。

    简单来说,我们可以将其视为:

    #include 
    int main()
    {
        int i;
        i = 1;
        int j; // this declaration is invalid in C89 standard, but valid in C99 and C++
        j = 3;
    }
    
    输出:
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。