[N ... M]在C聚合初始化器中的含义是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[N ... M]在C聚合初始化器中的含义是什么?相关的知识,希望对你有一定的参考价值。

sys.c第123行:

void *sys_call_table[__NR_syscalls] = 
{
    [0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};

sys_call_table是数组的通用指针,我可以看到。但是符号是什么:

[0 ... __NR_syscalls-1]

什么是...


编辑: 我在这里学到了另一个C技巧:#include <asm/unistd.h>将被预处理并替换为其内容并分配给[0 ... _NR_syscalls-1]

答案

它是使用Designated Initializers初始化。

基于范围的初始化是gnu gcc扩展。

要将一系列元素初始化为相同的值,请编写[first ... last] = value。这是一个GNU扩展。例如,

 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

它不便携。与-pedantic一起编译告诉你。

它在这里如何运作? 预处理器将#include <asm/unistd.h>替换为其实际内容(它定义了各种符号常量和类型,并在基于范围的构造中声明其他函数),然后进一步用于初始化指针数组。

以上是关于[N ... M]在C聚合初始化器中的含义是什么?的主要内容,如果未能解决你的问题,请参考以下文章

数据库设计中“n:m”和“1:n”的含义

谁能用m语言或者c语言帮我完成一下

Python 中的 x = [m]*n 语法是啥?

语言学纲要:举例说明语言系统的组合关系和聚合关系?

Python中[ : n][m : ][-n][:-n][::-n][m::-n]和[m:]的含义

C++ Vector对象默认构造初始化,它的值是多少?谢谢