成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

再談C語言的模塊化設(shè)計

開發(fā) 后端
模塊化首先用主程序、子程序、子過程等框架把軟件的主要結(jié)構(gòu)和流程描述出來,并定義和調(diào)試好各個框架之間的輸入、輸出鏈接關(guān)系。一起來看本文作者的觀點。

現(xiàn)代語言為了可以接近玩樂高積木的那樣直接組合現(xiàn)有的模塊,都對模塊化做了語言級別上的支持。我想這一點在軟件工程界也是逐步認識到的。C 語言實在是太老了。而它的晚輩 Go 就提供了 import 和 package 兩個新的關(guān)鍵字。

這也是我最為認可的方式。之前提到的方案只能說是對其拙劣的模擬。確認語言級的支持,恐怕也只能做到這一步了。

在項目實踐中,那個 USING 的方案我用了許多年,還算滿意。之前有過更為復(fù)雜“精巧”的方法,都被淘汰掉了。為什么?因為每每引入新的概念,都增加了新成員的學(xué)習(xí)成本。因為幾乎每個人都有 C 語言經(jīng)驗,但每個人的項目背景卻不同。接受新東西是有成本的。任何不是語言層面上的“必須”,都有值得商榷的地方。總有細節(jié)遭到質(zhì)疑。為什么不這樣,或許會更好?這是每個程序員說出或埋在心里的問題。

那個 USING 的方案遠不完美,它只是足夠簡潔,可以讓程序員勉強接受而已。但其實還不夠簡潔。因為從邏輯表達上來說,它是多余的。一個模塊使用了另一個模塊,代碼上已經(jīng)是自明的。從 C 語言的慣例上來說,只要 #include 了一個相關(guān)的 .h 文件,就證明它需要使用關(guān)聯(lián)的模塊。

光用宏的技巧很難只依靠一次 #include 就搞定正確的模塊初始化次序。因為 C 語言并沒有明顯的模塊概念。如果將每個子模塊都編譯為動態(tài)庫可能能一定的解決問題(我曾經(jīng)試過這種方案),但卻會引出別的問題。細粒度的動態(tài)庫局限性太大。

這兩天我結(jié)合這半年學(xué)習(xí) Go 語言的體驗,又仔細考慮了一下這個問題。想到另一個解決方案。

如果我們能規(guī)范系統(tǒng)中子模塊 API 的命名規(guī)范,或許可以借助編譯器和相關(guān)工具來做一些 meta programming 的工作。

我們可以使用 objdump 來分析編譯好的 .o 文件。比如有一個模塊 foo ,實現(xiàn)在 foo.c 中。objdump -t 可以得到 .o 中引用以及導(dǎo)出的符號。

我們要求所有子模塊中的 C API 都遵守一致的命名規(guī)范,假設(shè)用馱峰命名的話,foo 模塊中的 Api 就看起來像這樣 fooApi 。objdump 的結(jié)果可以輕易的識別出規(guī)范內(nèi)的引用的其它子模塊有哪些。然后生成一個類似之前提到的 USING 方法可以調(diào)用的初始化函數(shù)。自定義的模塊初始化函數(shù)可以統(tǒng)一命名為 fooInit 的形式,當(dāng)這個初始化函數(shù)存在,則由自動生成的代碼調(diào)用一下即可。

整個過程可能比較繁雜,但很容易用 make 這樣的構(gòu)建工具自動化進行。具體實現(xiàn)我就不列出了。或許不久會新開開源項目實踐一下。

原文鏈接:http://blog.codingnow.com/2011/04/module_initialization.html#more

【編輯推薦】

  1. C 語言對模塊化支持的欠缺
  2. 2.2 模塊化應(yīng)用程序
  3. CSS模塊化編碼 讓開發(fā)事半功倍
  4. 學(xué)習(xí)筆記 Flex模塊化詳盡解讀
責(zé)任編輯:于鐵 來源: 云風(fēng)的BLOG
相關(guān)推薦

2010-01-20 09:14:49

C語言模塊化

2011-05-13 15:46:49

C模塊化

2013-08-20 15:31:18

前端模塊化

2016-12-21 17:02:35

數(shù)據(jù)中心MDC模塊化

2016-12-14 14:50:26

CSS預(yù)處理語言模塊化實踐

2019-08-28 16:18:39

JavaScriptJS前端

2020-09-17 10:30:21

前端模塊化組件

2019-07-11 14:16:27

數(shù)據(jù)中心設(shè)計系統(tǒng)

2020-09-18 09:02:32

前端模塊化

2009-08-17 10:11:12

C# Windows

2021-04-06 10:19:36

Go語言基礎(chǔ)技術(shù)

2022-09-05 09:01:13

前端模塊化

2010-03-11 17:24:27

Python編程語言

2016-10-09 11:03:41

Javascript模塊化Web

2023-12-25 22:24:36

C++模塊Module

2017-01-10 14:19:37

模塊化數(shù)據(jù)中心MTTR

2022-09-21 11:51:26

模塊化應(yīng)用

2017-05-18 10:23:55

模塊化開發(fā)RequireJsJavascript

2015-10-10 11:29:45

Java模塊化系統(tǒng)初探

2022-03-11 13:01:27

前端模塊
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 视频二区在线观看 | 日韩欧美二区 | 国产在线97 | 91pao对白在线播放 | 麻豆精品久久久 | 亚洲综合色视频在线观看 | 国产精品视频网 | 日韩欧美专区 | 热久久999| 波多野结衣先锋影音 | www.色婷婷 | 亚洲精品av在线 | 久久人人国产 | 亚洲午夜精品视频 | 91福利在线观看 | 国外成人在线视频网站 | 亚洲一级av毛片 | 黄色免费观看网站 | 成人福利网站 | 日韩欧美专区 | 久色视频在线观看 | 美女逼网站 | 精品一二区 | av片网| 精品日韩在线 | 精品亚洲一区二区三区 | 久久久激情视频 | 欧美日韩一区二区电影 | 亚洲免费观看 | 久久精品中文字幕 | 国产精品久久久久久久久久久久久久 | 一级a性色生活片久久毛片 午夜精品在线观看 | 欧美a v在线| 亚洲一二三区在线观看 | 一本色道久久综合亚洲精品高清 | 99精品视频在线观看 | 成人精品一区二区三区 | 婷婷成人在线 | 国产在线二区 | 中文字幕亚洲精品 | 91香蕉视频在线观看 |