eric2013 发表于 2023-1-21 07:20:45

C语言的C23标准变更详解

https://icube-forge.unistra.fr/icps/c23-library/-/raw/main/README.html]https://htmlpreview.github.io/?h ... aw/main/README.html

这是一篇非常棒的变更介绍帖子

https://img.alicdn.com/imgextra/i2/299314119/O1CN015u3iZN1gIYCjQ20B3_!!299314119.png

sunlichao 发表于 2023-1-28 23:04:39

很好的资料

yunqi 发表于 2024-1-16 17:59:48

C23终于有了静态编译检查了,之前都是自己写

yunqi 发表于 2024-1-16 18:06:16

举例
#include <stdio.h>

int main() {
    _Static_assert(sizeof(int) == 4, "int类型不是4字节");
   
    printf("Hello, world!\n");
    return 0;
}

yunqi 发表于 2024-1-16 18:07:01

C语言是一种静态类型语言,它不直接支持泛型编程。然而,可以使用一些技巧来实现类似于泛型的功能。这些技巧在代码中增强了对类型的选择,使得代码更具灵活性和通用性。

下面是一个示例,展示如何使用宏和预处理指令来实现类似于泛型的选择:
#include <stdio.h>

#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main() {
    int x = 10;
    int y = 20;
    int max_int = MAX(x, y);
   
    double a = 3.14;
    double b = 2.71;
    double max_double = MAX(a, b);
   
    printf("Max of integers: %d\n", max_int);
    printf("Max of doubles: %f\n", max_double);
   
    return 0;
}
在上面的示例中,我们定义了一个宏MAX(a, b),它接受两个参数a和b,并返回较大的那个值。这个宏使用三元运算符来比较a和b的大小,并返回较大的那个值。

在main函数中,我们使用了宏MAX来比较不同类型的变量。首先,我们比较了两个整数x和y,得到了最大值max_int。然后,我们比较了两个浮点数a和b,得到了最大值max_double。

通过使用宏和预处理指令,我们可以在编译时根据不同的类型生成不同的代码。这种方式虽然可以达到类似于泛型的效果,但它也有一些局限性,比如无法处理复杂的数据结构或者进行类型安全检查。

除了宏,还可以使用其他技术来实现类似于泛型的选择,比如使用函数指针或者使用模板技术(如C++中的模板)。这些方法更加灵活和类型安全,但也会增加代码的复杂性。

yunqi 发表于 2024-1-16 18:12:01

#include "cmsis_os2.h"

void thread_func(void *argument) {
_Thread_local int thread_id = 0;   // 线程本地存储的变量

// ...
}


C11 引进存储区域标识符:引入了_Thread_local关键字,用于指定线程本地存储的变量。
页: [1]
查看完整版本: C语言的C23标准变更详解