linux - 为什么由于覆盖 gcc 中的联合成员而没有警告?
问题描述
假设 file.c 中有这个代码片段:
union numbers
{
int i;
float f;
};
union numbers first_number;
first_number.i = 5;
first_number.f = 3.9;
printf("%i %'.2f\n", first_number.i, first_number.f);
为什么在编译后没有first_number.i
被覆盖的警告gcc -Wall file.c
以及结果数量first_number.i
来自哪里?
至少,覆盖联合成员的一般目的是什么,而不是声明更多联合变量来避免这种行为不是更好吗?
解决方案
这就是 C 工会的工作方式。如果您想要不重叠的字段,请使用结构。存储浮点值后的.i
成员值是解释为 int 的位模式。
推荐阅读
- javascript - Summernote 在合并段落后添加跨度
- python - 如何使for循环中的语句超时
- ios - 如何将 UIImagePickerController 限制为仅选择纵向模式(深度效果)照片?
- python-3.x - 在 keras 回调中监控 F1 分数(或一般的自定义指标)
- c# - 如何将文件从 umbraco 后台上传到媒体部分?
- spring-kafka - Kafka Spring:如何为 ConcurrentKafkaListenerContainerFactory 和 ConcurrentMessageListenerContainer 编写单元测试?
- c++ - 为什么在尝试使用向量或映射来保持函数指针列表与 lambda 时出现编译错误
- suitescript2.0 - Suitescript 2.0 在不同线程上提交数据
- console - 在 Electron 中,我可以从主进程访问渲染器进程中的控制台吗
- javascript - Express/Node.js 页面刷新问题