C99与C11
C99扩展
1. 新的基本数据类型
long long
- 新增的整数类型,能够表示更大的整数值。通常为64位。
- 示例代码:
1
long long bigNumber = 9223372036854775807; // 最大值
_Bool
和bool
_Bool
是C99引入的布尔类型,stdbool.h
中定义了bool
,true
和false
。- 示例代码:
1
2
3
bool flag = true;
2. 变长数组(VLA)
- 在C99中,数组的大小可以在运行时指定。
- 示例代码:
1
2
3
4
5
6void func(int n) {
int arr[n]; // 变长数组
for (int i = 0; i < n; i++) {
arr[i] = i;
}
}
3. 新的预处理器功能
__func__
- 这个内置标识符用来获取当前函数的名称。
- 示例代码:
1
2
3void myFunction() {
printf("Function Name: %s\n", __func__);
}
4. inline
函数
- 可以使用
inline
关键字来建议编译器在调用点嵌入函数以提高效率。 - 示例代码:
1
2
3inline 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
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. 多线程支持
- 引入了
thread
和mutex
等功能,支持多线程编程。 - 示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
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
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语言在现代编程中的适应性更强。了解这些扩展不仅可以帮助程序员写出更高效的代码,还能提升代码的可读性和维护性。