我想初始化一个struct元素,在声明和初始化中拆分.这就是我所拥有的:
typedef struct MY_TYPE {
bool flag;
short int value;
double stuff;
} MY_TYPE;
void function(void) {
MY_TYPE a;
...
a = { true, 15, 0.123 }
}
Run Code Online (Sandbox Code Playgroud)
这是MY_TYPE根据C编程语言标准(C89,C90,C99,C11等)声明和初始化局部变量的方法吗?或者有什么更好或至少工作?
更新我最终得到一个静态初始化元素,我根据自己的需要设置每个子元素.
这是我刚刚在其他人的问题中找到的初始化.
my_data data[]={
{ .name = "Peter" },
{ .name = "James" },
{ .name = "John" },
{ .name = "Mike" }
};
Run Code Online (Sandbox Code Playgroud)
我之前从未见过这样的东西,也找不到解释.name可能是正确的.
我正在寻找的是这个过程如何逐步进行.
它看起来像是:
1) data;
2) *data;
3) (*data).name;
4) (*data).name="Peter";
Run Code Online (Sandbox Code Playgroud)
或者我完全错了?
我正在尝试实现一个程序来访问嵌入式系统上的内存.我需要访问一些控制寄存器,所以我认为ioctl是最好的方法.我已将ioctl添加到fops中:
struct file_operations aes_fops = {
read: aes_read,
write: aes_write,
unlocked_ioctl: aes_ioctl,
open: aes_open,
release: aes_release
};
Run Code Online (Sandbox Code Playgroud)
并设置了功能:
int aes_ioctl(struct inode *inode,
struct file *file,
unsigned int ioctl_num,
unsigned long ioctl_param){
printk(KERN_INFO "in ioctl\n");
....
}
Run Code Online (Sandbox Code Playgroud)
但我没有进入这个功能.这是我的用户空间代码.如果我这样做完全错了,请帮助我理解.
int main(int argc, char* argv[]){
int fd = fopen("/dev/aes", "r+");
ioctl(fd, 0, 1);
fclose(fd);
}
Run Code Online (Sandbox Code Playgroud)
有些代码显然适用于较旧的内核,因为我正在编译一个已修改旧版Linux的嵌入式系统.
我在Pebble watch app开发教程中遇到了以下代码:
// Set handlers to manage the elements inside the Window
window_set_window_handlers(s_main_window, (WindowHandlers) {
.load = main_window_load,
.unload = main_window_unload
});
Run Code Online (Sandbox Code Playgroud)
我无法理解.load和.unload的这个任务.这是标准C吗?我认为我以前从未见过类似的语法.
struct confd_data_cbs ssd_shdiag_callback = {
.callpoint = show_diag__callpointid_diag_cp,
.get_object = ssd_common_get_object,
.get_next = ssd_common_get_next,
};
Run Code Online (Sandbox Code Playgroud)
.callback,.get_object,.get_next?