C語言三個點...表示什么意思


C語言三個點...表示什么意思

  1. 可變參數
  2. 數組批量賦相同值
  3. 一種數組賦值方法

1,可變參數

當參數個數可變的時候會使用三個點來表示,比如內核中的printk的定義:

static inline int printk(const char *fmt, ...)  

2.數組批量賦相同值

比如指定從某個下標到另外一個下標初始化為同一個值,比如

  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. 如下:

image

3. 一種數組賦值方法

先用三點方法初始化數組,再用宏定義來對特定的值進行賦值,linux的系統調用就是使用這種方法來定義的系統調用號。

 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方式包含對特定值的處理

  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。

  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)

運行結果:
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM