C99将作为文字初始化值传递的值定义为结构,失败为非const
发布时间:2020-12-16 05:02:53 所属栏目:百科 来源:网络整理
导读:在(旧的) Linux源代码(用C89编写)中,使用标准C89结构文字初始化语法在结构初始化(ide_pci_device_s)中使用#define作为文字,但是,当我使用编译器编译时支持C99,我得到的错误初始化元素不是常量,下面是我正在使用的代码示例,它会抛出错误. #define ON_BOARD 1#
在(旧的)
Linux源代码(用C89编写)中,使用标准C89结构文字初始化语法在结构初始化(ide_pci_device_s)中使用#define作为文字,但是,当我使用编译器编译时支持C99,我得到的错误初始化元素不是常量,下面是我正在使用的代码示例,它会抛出错误.
#define ON_BOARD 1 #define PCI_VENDOR_ID_INTEL 0x8086 #define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e #define DEVID_PIIXa ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_82371FB_0}) typedef char byte; typedef struct ide_pci_devid_t { int one,two; } ide_pci_devid_t; typedef struct ide_hwif_t { int whatever; } ide_hwif_t; typedef struct ide_pci_enablebit_s { byte reg; /* byte pci reg holding the enable-bit */ byte mask; /* mask to isolate the enable-bit */ byte val; /* value of masked reg when "enabled" */ } ide_pci_enablebit_t; typedef struct ide_pci_device_s { ide_pci_devid_t devid; const char *name; void (*init_hwif)(ide_hwif_t *hwif); ide_pci_enablebit_t enablebits[2]; byte bootable; unsigned int extra; } ide_pci_device_t; static ide_pci_device_t ide_pci_chipsets[] = { // HERE is where it says 'non-const initializer {DEVID_PIIXa,"PIIX",NULL,{{0x41,0x80,0x80},{0x43,0x80}},ON_BOARD,0 },}; 我怎样才能使用#define的值,同时最低限度地改变使用C99编译器构建的源代码的结构? 解决方法
问题是演员:
#define DEVID_PIIXa ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_82371FB_0}) 你的编译器认为它使它不是常量.由于您使用初始化程序的位置是初始化嵌套的ide_pci_devid_t结构,因此您不需要强制转换.将定义更改为: #define DEVID_PIIXa {PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_82371FB_0} 会解决它. (从评论讨论中得到答案.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- AJAX--XMLHTTPREQUEST
- Redux中间件源码剖析
- ruby-on-rails – 未定义的方法`merge’for:name:Symbol
- org.postgresql.util.PSQLException: ERROR: relation "
- flexigrid在asp.net中的应用
- 域驱动设计 – CQRS / DDD:虚拟博客/帖子/类别/标签示例
- Cocos2d-x 3.3 动作游戏连续普通攻击判断-改进
- u-boot-2014.10移植第22天----添加nand flash命令支持(四)
- PostgreSQL创建函数(CREATE FUNCTION)
- c# – 使用数据注释标记字段“只读”