中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折!

歡迎光臨中圖網 請 | 注冊

包郵 C語言最佳實踐

作者:魏永明 著
出版社:人民郵電出版社出版時間:2025-01-01
開本: 16開 頁數: 398
中 圖 價:¥69.9(7.0折) 定價  ¥99.8 登錄后可看到會員價
加入購物車 收藏
開年大促, 全場包郵
?新疆、西藏除外
本類五星書更多>

C語言最佳實踐 版權信息

C語言最佳實踐 本書特色

【30年開源實戰經驗】作者傾囊相授,帶你領略開源項目的開發與維護之道。

【代碼藝術,一目了然】從可讀性到可維護性,從接口設計到性能優化,再到單元測試,本書教你如何寫出優雅高效的C代碼。

【項目維護利器CMake】掌握構建系統生成器CMake,提升代碼可移植性,靈活處理功能模塊,自動生成源代碼,讓項目維護變得輕松自如。

【接口設計,解耦大師】深入C程序接口設計模式,教你如何解耦代碼與數據,實現模塊化設計,掌握狀態機在C程序中的應用,打造高效分詞器、解析器。

【性能優化,測試先行】性能到測試,本書提供了一系列避免低效代碼的策略,教你如何進行單元測試,使用測試框架,以及高效調試C程序的技巧和工具。

C語言最佳實踐 內容簡介

本書是魏永明近30年來開發和維護MiniGUI、HVML等開源項目的經驗總結,旨在幫助有一定C程序編寫經驗的軟件工程師在短時間內有效提高設計能力和編碼水平。全書分為?3?篇;A篇從可讀性和可維護性出發,闡述了如何提高代碼的可讀性、用好寫好頭文件、正確理解編譯警告并消除潛在問題、定義和使用常量等,介紹了如何有效利用構建系統生成器(CMake)來維護項目;模式篇闡述了常見的C程序接口設計模式,說明了如何在C程序中解耦代碼和數據、利用子驅動程序實現模型、設計可加載模塊等,介紹了狀態機的概念以及在C程序中如何利用狀態機實現分詞器、解析器等;質量篇從性能和單元測試出發,闡述了如何在C程序中避免編寫低效代碼、進行單元測試、使用常見的單元測試框架等,介紹了高效調試C程序的若干技巧和工具。 本書適合從事系統軟件、嵌入式或物聯網開發的C程序員、計算機相關專業高年級本科生和研究生閱讀。

C語言最佳實踐 目錄

第 一篇 基礎篇第 1章 提高代碼可讀性 31.1 代碼可讀性的級別 31.2 壞代碼的特點 41.2.1 壞代碼實例 51.2.2 妙手理碼 7第 一篇 基礎篇第 1章 提高代碼可讀性 31.1 代碼可讀性的級別 31.2 壞代碼的特點 41.2.1 壞代碼實例 51.2.2 妙手理碼 71.3 編碼風格的內容 91.3.1 Linux內核編碼風格的一些規定 101.3.2 其他常見的編碼風格 111.4 提高代碼可讀性的*佳實踐 141.4.1 守好“80列”這條紅線 141.4.2 空格、大括號位置及縮進 151.4.3 指針聲明和定義中的星號位置 161.4.4 善用類型定義 161.4.5 命名規則保持一致 191.4.6 正確書寫注釋 201.4.7 優雅編寫條件編譯代碼 211.5 其他有關編碼風格的*佳實踐 231.5.1 下畫線前綴的使用 241.5.2 錯誤處理及集中返回 241.5.3 參數的合法性檢查 281.6 命名的藝術 321.7 實例分析 341.7.1 PurC函數庫頭文件 341.7.2 經典的list_head結構體及其接口 37第 2章 用好寫好頭文件 402.1 重新認識頭文件 402.1.1 頭文件的作用 402.1.2 頭文件的分類 422.1.3 頭文件機制的復雜性 472.2 濫用系統頭文件的負面影響 612.3 自定義頭文件中的常見問題 622.3.1 不使用或不當定義頭文件保衛宏 622.3.2 未正確處理和C 程序混用的情形 632.3.3 未處理可能的重復定義 652.3.4 包含不該出現在頭文件中的內容 662.3.5 未妥善處理可能的可移植性問題 682.4 頭文件相關的*佳實踐 702.4.1 兩大原則 702.4.2 頭文件的劃分及典型內容 712.4.3 頭文件的組織 77第3章 消除編譯警告 833.1 為什么不能忽視編譯警告 833.1.1 潛在問題恐釀成大禍 833.1.2 解讀編譯警告 843.2 常見的編譯警告及其分類 883.2.1 預處理警告 883.2.2 未使用警告 903.2.3 未初始化警告 933.2.4 類型安全警告 953.2.5 邏輯運算相關的警告 993.2.6 格式化相關警告 1023.2.7 詞法警告 1053.2.8 其他警告 1093.3 編譯警告和函數屬性 1103.3.1 malloc屬性 1113.3.2 nonnull屬性 1113.3.3 warn_unused_result屬性 1123.3.4 format屬性 1123.3.5 其他函數屬性 1133.4 消除編譯警告只是開始 114第4章 常量的定義和使用 1164.1 常見的常量使用問題 1164.1.1 立即數常量 1164.1.2 字符串常量 1194.2 正確定義和使用常量 1214.2.1 立即數常量 1214.2.2 字符串常量 1274.3 優雅定義和使用常量 1274.3.1 借助編譯器 1274.3.2 使用宏生成常量和代碼 1304.3.3 巧用編譯時斷言 1314.4 字符串的原子化 133第5章 充分利用構建系統生成器 1365.1 常用構建系統和構建系統生成器 1365.2 CMake影響編碼的選項或功能 1385.2.1 構建類型 1385.2.2 處理平臺差異 1395.2.3 自動生成代碼 1425.3 CMake構建體系模板 1435.3.1 整體結構和復制步驟 1435.3.2 多平臺支持 1495.3.3 檢測系統頭文件、函數或結構體成員 1505.3.4 查找第三方軟件包 1515.3.5 自定義功能測試 152第二篇 模式篇第6章 接口設計模式 1556.1 何謂好接口 1556.2 兩個接口設計原則 1576.3 一般性方法和技巧 1616.3.1 完備性的保證 1616.3.2 參數及返回值 1626.4 模式1:抽象數據類型 1646.4.1 范例1:變體 1666.4.2 范例2:讀寫流 1696.4.3 范例3:描述符或句柄 1736.5 模式2:抽象算法 1746.5.1 范例1:標準C庫的qsort()函數及其擴展 1776.5.2 范例2:MiniGUI的曲線生成器函數 1796.6 模式3:上下文 1816.6.1 顯式上下文 1816.6.2 隱式上下文 1836.6.3 范例1:標準C庫的錯誤碼 1846.6.4 范例2:PurC實例 1856.7 模式4:事件驅動 1866.7.1 范例1:MiniGUI消息驅動接口 1876.7.2 范例2:glib的事件驅動接口 1966.7.3 事件處理器的粒度 1996.8 模式5:通用數據結構 2026.8.1 范例1:在節點結構體中保留用戶數據成員 2026.8.2 范例2:在用戶結構體中包含通用節點結構體 2046.9 模式6:同類聚合 2096.9.1 范例1:STDIO接口中的同類聚合 2106.9.2 范例2:MiniGUI中圖片裝載接口的同類聚合 2126.9.3 范例3:PurC變體接口中的同類聚合 2126.9.4 避免過度設計 2146.10 模式7:遍歷和迭代 2156.10.1 方法1:遍歷宏 2156.10.2 方法2:遍歷回調 2186.10.3 方法3:迭代器 2206.11 模式8:接口的擴展和兼容性 2226.11.1 方法1:新舊接口共存 2226.11.2 方法2:舊接口只是新接口的繞轉接口 2246.11.3 方法3:強制使用新接口,將舊接口標記為廢棄或移除 2256.11.4 方法4:預留擴展能力 2256.11.5 擴展接口需要考慮的因素 2296.12 綜合范例:PurC中的有序數組 229第7章 解耦代碼和數據 2337.1 解耦代碼和數據的重要性 2337.2 一個簡單的例子 2357.2.1 數據和代碼耦合的版本 2357.2.2 數據和代碼解耦的版本 2367.3 再來一個例子 2387.4 更復雜的例子 2417.4.1 *初的實現 2437.4.2 改進的版本 2457.4.3 進一步優化 2477.5 自動生成代碼 2497.5.1 使用宏生成代碼 2497.5.2 使用程序生成代碼 251第8章 子驅動程序實現模型 2568.1 抽象的重要性 2568.2 隨處可見的子驅動程序實現模型 2578.3 子驅動程序實現模型的構成 2588.3.1 子驅動程序上下文結構體指針 2598.3.2 子驅動程序操作集 2608.3.3 普通文件流對象的子驅動程序實現 2618.3.4 內存緩沖區流對象的子驅動程序實現 2628.3.5 進一步思考 2648.4 正確區分機制和策略 2658.5 子驅動程序實現模型的演進 2668.5.1 *初的設計和實現 2668.5.2 反思一:子驅動程序操作集的定義是否足夠完備和靈活 2698.5.3 反思二:子驅動程序的實現中是否含有不該有的策略 2718.5.4 反思三:還有哪些可以改進的地方 273第9章 動態加載模塊 2759.1 可加載模塊的好處 2759.2 軟件棧和可加載模塊的設計原則 2759.3 可加載模塊的實現原理和要點 2789.3.1 可加載模塊的底層機制 2789.3.2 可加載模塊新舊版本的兼容性 2789.3.3 可加載模塊的實現要點 2809.4 使用可加載模塊支持新的圖片格式 2819.5 重用已有子驅動程序的實現 2859.5.1 合成器操作集 2869.5.2 合成器相關的應用程序接口 2879.5.3 派生一個自己的合成器 2889.5.4 裝載模塊定義的默認合成器 289第 10章 狀態機 29210.1 狀態機的概念 29210.2 定義一個狀態機 29310.3 正確理解狀態機 29510.4 狀態機在各類解析器中的應用 29710.4.1 簡單示例:判斷C語言立即數的進制 29710.4.2 復雜示例:HTML解析器中的分詞器 299第三篇 質量篇第 11章 為性能編碼 30911.1 何謂“性能” 30911.2 提高性能的3個基本原則 31211.2.1 不要做無用功 31211.2.2 殺雞莫用牛刀 31411.2.3 避免濫用內存分配 31511.3 實例研究:字符串匹配 31811.3.1 *直接的實現 31911.3.2 利用哈希算法進行優化 32011.3.3 字符串的原子化 32611.4 實例研究:如何判斷一個自然數是不是素數 33111.4.1 小于16的自然數 33111.4.2 可表示為無符號短整型的自然數 33211.4.3 可表示為64位無符號長整型的自然數 33411.5 實例研究:像素混合的并行計算 33511.6 實例研究:達夫設備 338第 12章 單元測試 34012.1 單元測試的基本概念和重要性 34012.2 單元測試的基本方法 34112.2.1 單元測試可以無處不在 34112.2.2 單元測試方法和測試用例的選擇 34212.2.3 單元測試的自動化 34812.3 單元測試框架 35412.3.1 GLib Testing 35412.3.2 GoogleTest 35712.3.3 CTest 35812.4 實例研究:HVML MATH對象的eval方法 35912.4.1 測試目標 35912.4.2 測試方法 36012.4.3 使用現有可信賴的工具生成預期結果 362第 13章 高效調試 36413.1 高效調試的基本原則 36413.2 C程序常見錯誤分類 36513.2.1 編譯、鏈接錯誤 36513.2.2 疑難雜癥 36613.3 內存使用錯誤 36713.3.1 靜態數據使用錯誤 36713.3.2 堆使用錯誤 37213.3.3 棧使用錯誤 37913.4 內存診斷工具 38113.4.1 Efence 38113.4.2 ASAN 38413.4.3 Valgrind 38613.5 日志 391后記 396
展開全部

C語言最佳實踐 作者簡介

魏永明,獲清華大學工學學士、碩士學位,飛漫軟件創始人,2013年度“開源軟件杰出貢獻人物”,2023年世界開源軟件Top100貢獻榜人物。1999年發布了開源軟件MiniGUI并持續研發至今。編(譯)著有《MiniGUI剖析》、《Linux 實用教程》、《Linux 設備驅動程序》(二、三版)等技術著作。2018年11月,發起合璧操作系統開源協作項目;2020年8月,提出首款描述式編程語言HVML;2022年7月,開源發布 HVML 解釋器及渲染器。

商品評論(0條)
暫無評論……
書友推薦
本類暢銷
返回頂部
中圖網
在線客服
主站蜘蛛池模板: 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页| 交通气象站_能见度检测仪_路面状况监测站- 天合环境科技 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 智慧水务|智慧供排水利信息化|水厂软硬件系统-上海敢创 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | 365文案网_全网创意文案句子素材站| 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 协议书_协议合同格式模板范本大全 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 执业药师报名时间,报考条件,考试时间-首页入口 | 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 |