C語言三個點...表示什麼意思linux
當參數個數可變的時候會使用三個點來表示,好比內核中的printk的定義:數組
static inline int printk(const char *fmt, ...)
好比指定從某個下標到另一個下標初始化爲同一個值,好比函數
1 2 #include <stdio.h> 3 4 int main(){ 5 int table[7]={ 6 [3 ... 6]=7, 7 }; 8 int i = 0; 9 for(i=0;i<7;i++) 10 { 11 printf("table[%d]=%d\n",i,table[i]); 12 } 13 }
這裏表示數組table 下標從3 開始到6的元素賦值爲7. 以下:code
先用三點方法初始化數組,再用宏定義來對特定的值進行賦值,linux的系統調用就是使用這種方法來定義的系統調用號。blog
69 const syscall_fn_t sys_call_table[__NR_syscalls] = { 70 [0 ... __NR_syscalls - 1] = __arm64_sys_ni_syscall, 71 #include <asm/unistd.h> } // 這個是linux系統代碼實例,下面用一個相對簡單的例子來理解這種方法
主函數,用[0 … 6] 對數組的全部變量賦值爲7 。使用include方式包含對特定值的處理io
1 2 #include <stdio.h> 3 4 int main(){ 5 int table[7]={ 6 [0 ... 6]=7, 7 #include "b.h" 8 }; 9 int i = 0; 10 for(i=0;i<7;i++) 11 { 12 printf("table[%d]=%d\n",i,table[i]); 13 } 14 }
特定值處理頭文件b.h ,_CALL(3,5) 表示對下標爲3的賦值爲5。asm
2 #ifndef _CALL 3 #define _CALL(x,y) 4 #endif 5 6 #undef _CALL 7 #define _CALL(x,y) [x]=y,//這裏是從新定義參數的形式 8 9 _CALL(3,5) 10 _CALL(4,9)
運行結果:
table