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

[原创]一个C语法

2014-6-18 15:05
5907
今天看 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的时候是没有这种语法的。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
2
没用过,可以理解成弱化版的映射...O(∩_∩)O哈哈~
2014-6-18 15:13
0
雪    币: 229
活跃值: (503)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/Designated-Inits.html

c99
2014-6-18 15:22
0
雪    币: 69
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
有点儿意思……
2014-6-18 16:23
0
雪    币: 1895
活跃值: (1657)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
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源码也是这么写的。
恰好也是今天才看到~~~
2014-6-18 16:30
0
雪    币: 354
活跃值: (157)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
长见识了
2014-6-18 16:56
0
雪    币: 39
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
涨姿势。。来看看
2014-6-18 17:07
0
雪    币: 102
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
小白想问这样做有什么优势呢?
2014-6-18 17:17
0
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
编译失败?!
DEVC++ 4.9.2,在设置里开启了支持所有ANSI C标准
2014-6-18 18:28
0
雪    币: 11111
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习了。。。
2014-6-18 18:37
0
雪    币: 19
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
3L正解,c99中就有指定元素赋值了,cpp这本书上就有写。
2014-6-19 10:18
0
游客
登录 | 注册 方可回帖
返回
//