首页
社区
课程
招聘
[原创]一个C语法
2014-6-18 15:05 5201

[原创]一个C语法

2014-6-18 15:05
5201
今天看 Go 源码,发现一个新奇的 C 语法,测试了一下,原来是这么回事!

enum {
    TINT = 5,
    TUINT3 = 7,
    TINT8 = 9,
    TSTRING = 11,
};
static char* _typekind[] = {
    [TINT]      = "int",
    [TUINT3]     = "uint",
    [TINT8]     = "int8",
    [TSTRING]   = "string",
};

void Test_in_C()
{
    int i = 0;
    printf("TUINT3 is %d \n", TUINT3);
    printf("TSTRING is %d \n", TSTRING);
    for (i=0;i<10;i++)
    {
        printf("%d %s\n", i, _typekind[i]);
    }
}

输出结果:

TUINT3 is 7
TSTRING is 11
0 (null)
1 (null)
2 (null)
3 (null)
4 (null)
5 int
6 (null)
7 uint
8 (null)
9 int8

原来是定义数组时,可以用 [pos] 指定数组元素的位置。不知道这是什么规范中添加的。至少我原来学C的时候是没有这种语法的。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 2660
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2014-6-18 15:13
2
0
没用过,可以理解成弱化版的映射...O(∩_∩)O哈哈~
雪    币: 227
活跃值: (383)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
hatling 3 2014-6-18 15:22
3
0
http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/Designated-Inits.html

c99
雪    币: 69
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hhxlovety 2014-6-18 16:23
4
0
有点儿意思……
雪    币: 1905
活跃值: (1427)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
z许 2014-6-18 16:30
5
0
static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
    [EXIT_REASON_EXCEPTION_NMI]           = handle_exception,
    [EXIT_REASON_EXTERNAL_INTERRUPT]      = handle_external_interrupt,
    [EXIT_REASON_TRIPLE_FAULT]            = handle_triple_fault,
    [EXIT_REASON_NMI_WINDOW]          = handle_nmi_window,
    [EXIT_REASON_IO_INSTRUCTION]          = handle_io,
    [EXIT_REASON_CR_ACCESS]               = handle_cr,
    [EXIT_REASON_DR_ACCESS]               = handle_dr,
    [EXIT_REASON_CPUID]                   = handle_cpuid,
    [EXIT_REASON_MSR_READ]                = handle_rdmsr,
    [EXIT_REASON_MSR_WRITE]               = handle_wrmsr,
    [EXIT_REASON_PENDING_INTERRUPT]       = handle_interrupt_window,
    [EXIT_REASON_HLT]                     = handle_halt,
    [EXIT_REASON_INVD]            = handle_invd,
    [EXIT_REASON_INVLPG]              = handle_invlpg,
    [EXIT_REASON_VMCALL]                  = handle_vmcall,
    [EXIT_REASON_VMCLEAR]                 = handle_vmx_insn,
    [EXIT_REASON_VMLAUNCH]                = handle_vmx_insn,
    [EXIT_REASON_VMPTRLD]                 = handle_vmx_insn,
    [EXIT_REASON_VMPTRST]                 = handle_vmx_insn,
    [EXIT_REASON_VMREAD]                  = handle_vmx_insn,
    [EXIT_REASON_VMRESUME]                = handle_vmx_insn,
    [EXIT_REASON_VMWRITE]                 = handle_vmx_insn,
    [EXIT_REASON_VMOFF]                   = handle_vmx_insn,
    [EXIT_REASON_VMON]                    = handle_vmx_insn,
    [EXIT_REASON_TPR_BELOW_THRESHOLD]     = handle_tpr_below_threshold,
    [EXIT_REASON_APIC_ACCESS]             = handle_apic_access,
    [EXIT_REASON_WBINVD]                  = handle_wbinvd,
    [EXIT_REASON_XSETBV]                  = handle_xsetbv,
    [EXIT_REASON_TASK_SWITCH]             = handle_task_switch,
    [EXIT_REASON_MCE_DURING_VMENTRY]      = handle_machine_check,
    [EXIT_REASON_EPT_VIOLATION]       = handle_ept_violation,
    [EXIT_REASON_EPT_MISCONFIG]           = handle_ept_misconfig,
    [EXIT_REASON_PAUSE_INSTRUCTION]       = handle_pause,
    [EXIT_REASON_MWAIT_INSTRUCTION]       = handle_invalid_op,
    [EXIT_REASON_MONITOR_INSTRUCTION]     = handle_invalid_op,
};


kvm源码也是这么写的。
恰好也是今天才看到~~~
雪    币: 354
活跃值: (147)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
haithink 1 2014-6-18 16:56
6
0
长见识了
雪    币: 39
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
No紫色 2014-6-18 17:07
7
0
涨姿势。。来看看
雪    币: 102
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
谷月轩 1 2014-6-18 17:17
8
0
小白想问这样做有什么优势呢?
雪    币: 80
活跃值: (99)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sunnysab 2014-6-18 18:28
9
0
编译失败?!
DEVC++ 4.9.2,在设置里开启了支持所有ANSI C标准
雪    币: 7446
活跃值: (148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guobing 2014-6-18 18:37
10
0
学习了。。。
雪    币: 19
活跃值: (69)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
破九 2014-6-19 10:18
11
0
3L正解,c99中就有指定元素赋值了,cpp这本书上就有写。
游客
登录 | 注册 方可回帖
返回