数组定义并少量初始化的误区以及三目运算的适用场景
📅 2026/7/8 5:53:19
👁️ 次浏览
1数组定义并少量初始化的误区最近我在看linux内核源码发现函数里面使用了大量数组变量其中有一些数组在定义的同时完成了初部分元素的少量始化处理这里以前我一直有一个误区那就是对只对显式元素进行初始化处理那种隐式的元素为垃圾值现在着重强调一下这种理解是错误的。如下代码enum s5p_tv_hdmi_err s5p_hdmi_init_spd_infoframe( enum s5p_hdmi_transmit trans_type, u8 *spd_header, u8 *spd_data) { u8 header[3] {0x83, 0x1, 25}; u8 vendor[8] {0,}; u8 product[17] {0,}; int checksum 0; int i; switch (trans_type) { case HDMI_DO_NOT_TANS: writel(SPD_TX_CON_NO_TRANS, g_hdmi_base S5P_SPD_CON); break; case HDMI_TRANS_ONCE: writel(SPD_TX_CON_TRANS_ONCE, g_hdmi_base S5P_SPD_CON); break; case HDMI_TRANS_EVERY_SYNC: writel(SPD_TX_CON_TRANS_EVERY_VSYNC, g_hdmi_base S5P_SPD_CON); break; default: pr_err(%s::invalid out_mode parameter(%d)\n, __func__, trans_type); return S5P_TV_HDMI_ERR_INVALID_PARAM; break; } ... }在函数开头位置定义了2个数组vendor和product都是用了{0, }的初始化用法。首先我们有时候看到{}内部初始化值后面跟着逗号“,”有时候又没有这两种写法编译器都是允许的并且完全等效。其次这样写的目的是2个数组中每一个元素都被写0而不是只有第一个元素0写0剩余其他元素为垃圾值因为存在栈上我以前那种理解方式是完全错误的。无论是早期编译器、还是比较现代的gcc/clang编译器至少从KR经典时代开始就这样规定了。我以前那种误理解方式是完全错误的将没有初始化和部分初始化给等效了。最后如果初始化值不为0例如int a[5] {7, } /* 逗号空格可以省略 */正确的理解是元素a[0] 7,剩余其他元素为0而不是每一个元素都是7也不是隐藏元素为垃圾值。总结数组定义并初始化时遇到“少量初始化”后剩余隐式元素会自动补0处理。2三目运算符? :的适用场景在看linux内核源码的时候里面有大量代码使用了三目运算而非使用if-else if-else条件判断语句我当时就有一个疑问为什么在这里使用三目运算而不使用更广泛的if-else if-else条件判断呢先看代码void s5p_hdmi_audio_set_acr(u32 sample_rate) { u32 value_n (sample_rate 32000) ? 4096 : (sample_rate 44100) ? 6272 : (sample_rate 88200) ? 12544 : (sample_rate 176400) ? 25088 : (sample_rate 48000) ? 6144 : (sample_rate 96000) ? 12288 : (sample_rate 192000) ? 24576 : 0; u32 cts (sample_rate 32000) ? 27000 : (sample_rate 44100) ? 30000 : (sample_rate 88200) ? 30000 : (sample_rate 176400) ? 30000 : (sample_rate 48000) ? 27000 : (sample_rate 96000) ? 27000 : (sample_rate 192000) ? 27000 : 0; HDMIPRINTK(sample rate %d\n, sample_rate); HDMIPRINTK(cts %d\n, cts); writel(value_n 0xff, g_hdmi_base S5P_ACR_N0); writel((value_n 8) 0xff, g_hdmi_base S5P_ACR_N1); writel((value_n 16) 0xff, g_hdmi_base S5P_ACR_N2); writel(cts 0xff, g_hdmi_base S5P_ACR_MCTS0); writel((cts 8) 0xff, g_hdmi_base S5P_ACR_MCTS1); writel((cts 16) 0xff, g_hdmi_base S5P_ACR_MCTS2); writel(cts 0xff, g_hdmi_base S5P_ACR_CTS0); writel((cts 8) 0xff, g_hdmi_base S5P_ACR_CTS1); writel((cts 16) 0xff, g_hdmi_base S5P_ACR_CTS2); writel(4, g_hdmi_base S5P_ACR_CON); }这里使用了2个三目运算实现多个分支判断从这个理解可以看出三目运算的代码段只有一行代码不能有多行正要写反也要写才能更好描述清楚例如4096, 6272, 12544...如果写成if-else if-else条件判断只有一行代码代码空白空间浪费太多。另外三目运算符经常用于这种赋值运算将判断的结果赋值给某个变量当然这种三目运算在赋值运算中的应用经常在return作为返回值返回如下代码。其实return语句也是进行一次隐式赋值操作只是这个赋值操作可以有接收方也可以没有返回值没有利用起来没有将返回值用于知道后续代码编写c语言编译器都是允许的。static inline const char *basename(const char *path) { const char *tail strrchr(path, /); return tail ? tail1 : path; }总结三目运算适合代码段只有一行代码的条件判断而且三目运算写代码能够减少代码空白区域浪费。代码段只有一行代码的情况优先使用三目运算替代普通if条件判断。三目运算经常用于赋值运算和return语句的代码。
在数字化时代,音乐已成为人们生活中不可或缺的精神食粮,而音乐播放软件作为连接用户与音乐世界的桥梁,其重要性日益凸显。本项目旨在构建一个基于B/S架构的音乐播放软件,采用前后端分离的开发模式,前端部分运用Vue框架…
📅 2026/7/8 5:51:19
A Practical Approach Based on Machine Learning to Support Signal Integrity Design阅读总结 目录A Practical Approach Based on Machine Learning to Support Signal Integrity Design阅读总结1. 问题定义与行业背景1.1 信号完整性在PCB设计中的核心挑战1.2 现有仿真方法的…
📅 2026/7/8 5:51:19
|技术问题?选型困惑?
在口袋灯、便携补光灯等小型照明产品的开发过程中,很多工程师都会遇到一个典型问题:
灯具在初始点亮时亮度正常,但运行一段时间后机身温度明显升高,同时输出亮度出现下降。…
📅 2026/7/8 5:51:19
在快节奏的生活里,大家越来越重视健康和养生。养生酒作为一种结合了传统中医理论与现代生活需求的产品,逐渐受到人们的青睐。但是,市场上的养生酒品牌众多,质量参差不齐,如何挑选一款真正让人放心饮用的好酒呢…
📅 2026/7/8 6:57:37
了,换个任务,它又忘得一干二净。这其实是当前大多数 AI 工具的通病:没有持久记忆,没有固定身份,没有对你的真实了解。而今天要介绍的这套「灵魂三件套」,正是为了解决这个问题。当小龙虾拥有了身份、获得了…
📅 2026/7/8 6:57:37
Small Language Models、On-device AI 与边缘部署趋势:从“小模型”到端侧智能系统系列:AI 论文盘点 / 技术趋势,第二轮:2026 AI 系统与 Agent 基础设施专题
日期:2026-07-06
适合读者:研究生、端侧 AI/推理…
📅 2026/7/8 6:57:37
ChatGPT 提示工程进阶:3类结构化模板解决90%开发难题1. 为什么开发者需要掌握提示工程?在代码调试的深夜,你是否曾对着模糊的错误信息束手无策?当学习新技术栈时,是否希望有个能理解你知识背景的导师?这些场…
📅 2026/7/8 6:57:37
怎样在6个月内从零基础转码成功:非科班程序员的完整实战指南 【免费下载链接】InterviewGuide 🔥🔥「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总,包括但…
📅 2026/7/8 6:57:37
人机协作,仅供参考记忆力是否天生注定、无法更改?现代认知科学给出的答案是否定的。记忆如同肌肉,可以通过科学的训练方法加以强化。以下七则经过实践检验的记忆法则,构成了一个完整的记忆提升系统,它们相互关联&#…
📅 2026/7/8 6:55:37
Docker 彻底卸载指南:CentOS/Ubuntu 双系统 5 步清理残留文件当 Docker 环境出现版本冲突、安装失败或需要迁移时,常规的卸载命令往往无法彻底清理系统。残留的配置文件、依赖项和缓存文件可能导致新安装的 Docker 出现各种诡异问题。本文将提供一套完整…
📅 2026/7/8 0:00:10
SQL 数据分析性能优化实战:窗口函数 vs 子查询 vs 临时表 在数据分析工作中,SQL查询性能往往是决定工作效率的关键因素。面对复杂的业务场景,如何选择最优的查询方案?本文将深入对比窗口函数、子查询和临时表三种技术方案…
📅 2026/7/8 0:00:10
日期:2026-07-07> 本期聚焦近一日(2026-07-06 至 07-07)出台的金融与行业政策,按"背景—核心—影响—受益/风险"四维度解读。政策内容依据原始发布信息整理,解读仅供参考,不构成投资建议。一、…
📅 2026/7/8 0:00:10
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/7 12:08:23
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/7 9:08:28
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/7 6:33:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/7 9:08:31
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/7 9:08:30
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/7 4:32:18