【发布时间】:2018-11-12 14:22:40
【问题描述】:
我目前正在使用设备管理器,但遇到了问题... 如图所示,我声明了一个结构数组,它应该保存设备的写入函数(vga,串行)......主要问题是我不想调用初始化函数,例如 vga_init() 或 serial_init()将它们分配给结构,这将失去意义......我想将这些函数存储在结构数组中,有没有一种方法可以在没有函数的情况下分配 vga_write/serial_write,如下所示(注意两个 cmets)?
感谢您的建议!
/* device.h */
#define vga 0
#define serial 1
/* device info structure */
struct device_io {
void (*write)(const char *str);
}
extern struct device_io *io[];
/* vga.c */
io[vga] = { .wr = &vga_write }; // Won't work!
void vga_write(const char *str) { ...
/* serial.c */
io[serial] = { .wr = &serial_write }; // Won't work also!
void serial_write(const char *str) { ...
【问题讨论】:
-
@M.Aroosi 不,这不是真的。
vga必须是要替换的单独单词,因此vga_write不会受到影响。 -
宏替换将产生
info[0] = { .wr = &vga_write }; // Won't work!,但看不到info[]数组。并且,函数vga_write在这一点上是未知的 - 它是接下来定义的。 -
对不起,我不是故意写 info[] :P Info has been struct device_io *io[]; vga_write 和 serial_write 在顶部声明。问题是,如何在不调用分配它们的函数的情况下将这些函数分配给 io-struct
-
喜欢,例如 io[vga] = { .wr = &vga_write };当它不在函数内时,它会抛出一个错误... Short 说,我想在没有函数的情况下初始化数组..