C99与C11

C99与C11

C99扩展

1. 新的基本数据类型

  • long long

    • 新增的整数类型,能够表示更大的整数值。通常为64位。
    • 示例代码:
      1
      long long bigNumber = 9223372036854775807; // 最大值
  • _Boolbool

    • _Bool 是C99引入的布尔类型,stdbool.h 中定义了 booltruefalse
    • 示例代码:
      1
      2
      3
      #include <stdbool.h>

      bool flag = true;

2. 变长数组(VLA)

  • 在C99中,数组的大小可以在运行时指定。
  • 示例代码:
    1
    2
    3
    4
    5
    6
    void func(int n) {
    int arr[n]; // 变长数组
    for (int i = 0; i < n; i++) {
    arr[i] = i;
    }
    }

3. 新的预处理器功能

  • __func__
    • 这个内置标识符用来获取当前函数的名称。
    • 示例代码:
      1
      2
      3
      void myFunction() {
      printf("Function Name: %s\n", __func__);
      }

4. inline 函数

  • 可以使用 inline 关键字来建议编译器在调用点嵌入函数以提高效率。
  • 示例代码:
    1
    2
    3
    inline int square(int x) {
    return x * x;
    }

5. 允许的注释风格

  • C99引入了新的注释风格 //,这种方式可以用于单行注释。
  • 示例代码:
    1
    2
    // 这是单行注释
    printf("Hello World\n"); // 打印信息

C11扩展

1. 原子操作

  • C11引入了对原子操作的支持,允许进行无锁并发编程。
  • 示例代码:
    1
    2
    3
    4
    5
    6
    7
    #include <stdatomic.h>

    atomic_int count = 0;

    void increment() {
    atomic_fetch_add(&count, 1);
    }

2. _Static_assert

  • 支持编译时断言,确保某些条件在编译时得到满足。
  • 示例代码:
    1
    _Static_assert(sizeof(int) == 4, "int must be 4 bytes");

3. 多线程支持

  • 引入了 threadmutex 等功能,支持多线程编程。
  • 示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <threads.h>

    void threadFunction() {
    printf("Hello from thread!\n");
    }

    int main() {
    thrd_t thread;
    thrd_create(&thread, threadFunction, NULL);
    thrd_join(thread, NULL);
    return 0;
    }

4. 泛型选择

  • 使用 _Generic 提供了基本的泛型编程支持。
  • 示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define type_of(var) _Generic((var), \
    int: "int", \
    float: "float", \
    double: "double", \
    default: "other")

    int main() {
    printf("The type of 5 is: %s\n", type_of(5)); // prints "int"
    printf("The type of 5.0 is: %s\n", type_of(5.0)); // prints "double"
    }

5. 更严格的类型检查

  • C11中对指针的类型转换进行了更严格的检查,避免错误的类型使用。

6. 新增的库函数

  • C11 定义了若干新的库函数,例如:
    • aligned_alloc 提供了对齐内存分配。
    • timespec_get 提供了更精确的时间获取。

总结

C99和C11在很大程度上扩展了C语言的功能,提升了其安全性、简洁性和多线程能力。这些新特性使得C语言在现代编程中的适应性更强。了解这些扩展不仅可以帮助程序员写出更高效的代码,还能提升代码的可读性和维护性。

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议