c中的奇怪的括号和宏语法
发布时间:2020-12-16 03:36:36 所属栏目:百科 来源:网络整理
导读:我试图把这个表达到谷歌,但没有找到任何有用的描述它.以下是代码: struct Segdesc gdt[] ={ // 0x0 - unused (always faults -- for trapping NULL far pointers) SEG_NULL,// 0x8 - kernel code segment [GD_KT 3] = SEG(STA_X | STA_R,0x0,0xffffffff,0),
我试图把这个表达到谷歌,但没有找到任何有用的描述它.以下是代码:
struct Segdesc gdt[] = { // 0x0 - unused (always faults -- for trapping NULL far pointers) SEG_NULL,// 0x8 - kernel code segment [GD_KT >> 3] = SEG(STA_X | STA_R,0x0,0xffffffff,0),// 0x10 - kernel data segment [GD_KD >> 3] = SEG(STA_W,// 0x18 - user code segment [GD_UT >> 3] = SEG(STA_X | STA_R,3),// 0x20 - user data segment [GD_UD >> 3] = SEG(STA_W,// 0x28 - tss,initialized in trap_init_percpu() [GD_TSS0 >> 3] = SEG_NULL }; 有人可以解释有没有数组或指针前面的括号的含义吗? 解决方法
这种模糊的语法被称为指定的初始化程序,它允许您在创建数组聚合时跳过元素.
看看这个程序: #include <stdio.h> int a[] = { 1,[2]=3,[5]=7 }; int main() { int i; for(i=0;i!=sizeof(a)/sizeof(int);i++) printf("a[%d] = %dn",i,a[i]); return 0; } 它使用相同的语法来跳过数组a的元素1,3和4. 这是程序打印的: a[0] = 1 a[1] = 0 a[2] = 3 a[3] = 0 a[4] = 0 a[5] = 7 您的程序执行相同的操作,但是会初始化一个结构数组,并使用编译时常量的位移将索引计算到其数组聚合中.您可以在注释(0x08,0x10,0x18,0x20和0x28)中找到这些索引的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读