以下三种内嵌结构体的赋值的区别:
windows平台下使用virutal studio2019编译时遇到问题,创建结构体使用.属性名的初始化方式,编译器报错如下,提示应输入表达式
主要原因是当前设置的编译器不支持这个方法去初始化,通过修改编译器配置的方式可以解决该报错
之前是x86 将x86改成x64后就可以发现报错提示没有了
继续
A
struct device_driver beep_device_driver = { struct platform_driver beep_platform_driver ={ |
使用结构体名称直接传入的方式,
测试结果可以实现,但是在 linux中实现时却发生报错:
C语言初始化一个全局变量或static变量时,只能用常量赋值,不能用变量赋值
根据分析应该是在C语言规则中不能这样操作,但是在C++中是可以的
将结构体放入到函数中变成局部变量后,果然没有报错了,
C语言初始化一个全局变量或static变量时,只能用常量赋值,不能用变量赋值,但是C++可以
B
struct device_driver beep_device_driver = { struct platform_driver beep_platform_driver ={ |
beep_device_driver的地址对driver进行初始化,虽然beep_device_driver地址是常量,编译可以通过,但是beep_device_driver地址对于driver来说是无意义的值,并不能进行有效的初始化,不能达到将beep_device_driver的值赋给driver的效果,所以无效
C
struct platform_driver beep_platform_driver ={ |
直接将beep_device_driver中的内容在结构体中直接初始化,这样的操作是可行的,实现了初始化的效果