4 8一些雜散但是值得討論的問題

2022-09-07 00:51:16 字數 2924 閱讀 6009

(1)作業系統負責管理和資源調配,應用程式負責具體的直接勞動,他們之間的介面就是api函式,當應用程式需要自己使用系統資源時(譬如記憶體、cpu、硬體)就通過api向作業系統發出申請,然後作業系統就相應申請幫助應用程式實現功能。

(1)有了作業系統後,我們做剷平可以分為兩個部分,一部分人負責做作業系統(開發驅動);一部分負責作業系統實現具體功能(開發應用)。實際上上層應用層的功能進一步複雜化後又分了很多層。

總結:函式的返回值就是給呼叫他的人返回乙個值

總結:我麼有多種方法執行乙個程式,但是本質上是相同的。linux中乙個新程式的執行本質上是乙個程序的建立、載入、執行、消亡。linux中執行乙個程式其實就是建立乙個新程序,然後把這個程式丟進去執行知道結束。新程序被誰開啟。linux中程序都是被它的父程序fork出來的。

分析:命令列本身就是乙個程序,在命令列低下./xx執行乙個程序,其實就是新程序作為命令列程序的乙個子程序去執行的。

總之一句話:乙個程式被它的父程序所呼叫

結論:main函式返回給呼叫這個函式的父程序。父程序要這個返回值幹什麼?父程序呼叫子程序來完成乙個任務,然後子程序執行完後通過main函式的返回值來給父程序乙個答覆。這個答覆一般表示子程序的任務執行結果時成功了還是錯誤了。(0表示執行成功了,負數表示執行失敗了)

/*在 .sh 檔案中的**如下 */

#!/bin/sh

./a.out

echo $?

#ifdef _cplusplus      //條件編譯

#define null 0

#else

#define null (void *)0    //這裡對應的是c語言的情形

#endif

解釋:c++的編譯環境中,編譯器預先定義了乙個巨集_cplusplus,程式中可以用條件編譯來判斷當前的編譯環境是c++還是c的。

null的本質解析:null的本質是0,但是這個0不是當乙個數字解析,而是當乙個記憶體位址來解析的,這個0其實是0x00000000,代表的是記憶體的0位址。

(void *)0這個整體表示式表示乙個指標,這個指標變數本身佔4個位元組,位址在**取決於指標變數本身,但是這個指標變數的值是0,也就是說這個指標變數指向0位址(實際上是0位址開始的一段記憶體)。

int *p =null;

p = xx;

if(null != p)

p = null;    //用完後p再次等於null

注意:一般我們比較乙個指標和null是否相等不寫成if(p != null),而寫成if(null != p)   原因是第一種寫法如果把==寫成了=編譯器不會報錯,但是意思已經完全改變。而第二種會報錯,提示你找到錯誤並改正。

總結:『\0』用法是c語言字串結尾標誌,一般用來比較字串中的字元以判斷字串有沒有到頭

『0』是字元0,對應0這個字元的ascii編碼;一般用來獲取0 的ascii的碼值

0是數字,一般用來比較乙個int型別的數字是否等於0

null是乙個表示式,一般用來比較乙個指標是否是乙個野指標

4.8.6.3、使用臨時變數來理解強制型別轉換

4.8.6.4、使用臨時變數來理解不同資料型別之間的運算

(1)debug版本就是包含了除錯資訊輸出的版本,在程式測試過程中會發布debug版本,這種版本的程式執行時會列印出來除錯資訊/log檔案,這些資訊會輔助測試人員判斷問題所在debug版本的壞處是輸出除錯資訊占用了系統資源,拖慢了系統執行的速度,因此debug版本的新能低於release版本

(2)release版本就是最終的發布版本,相較於debug版本的功能**是一樣的,但是去掉了提哦啊哈斯資訊,適合最終測試通過,要發布的程式,因為去掉了除錯資訊,所以執行效率會高很多。

(3)debug版本和release版本其實是一套源**。源**中是有很多的列印除錯資訊的語句的。如何來控制和生成debug和release版本呢?就要靠條件編譯

#define debug

#define dbg()  printf()

#else

#define dbg()

#endif

4.8.8.5、debug巨集的使用方法

4.5.8.6、分析幾個debug巨集

(1)應用程式中的debug巨集

#define debug#ifdef debug

#define dbg(...) fprintf(stderr, " dbg(%s, %s(), %d): ", __file__, __function__ , __line__); fprintf(stderr, __va_args__)

#else

#define dbg(...)

#endif

注: _file_等是c語言中的巨集定義庫,就是說這個東西是巨集定義,但是是ic語言自己定義的,這些巨集具有特殊含義,譬如_file_表示當前正在編譯的c檔案的檔名

示例**:

#include #define debug#ifdef debug

#define dbg(...) fprintf(stderr, " dbg(%s, %s(), %d): ", __file__, __function__ , __line__); fprintf(stderr, __va_args__)

#else

#define dbg(...)

#endif

int main(void

)結果:dbg(debug.c, main(), 23): tiaoshi.

(2)核心中的debug巨集

#ifdef debug _s3c_mem

#define debug(fmt, args...)  printk(fmt, ##args)

#else

#define debug(fmt, args...) do {} while (0)

#endif

一些雜散但值得討論的問題

朱老師物聯網大講堂 學習筆記 1 作業系統不直接幹活,而是負責管理資源,作業系統的呼叫通道,api函式,c庫函式和api的關係,不同作業系統api是不同的,庫函式相似性很高,跨作業系統可移植平台,比如qt,2 main函式返回給誰,3 argc argv與main函式的傳參,4 c語言中不能有沒有型...

Android系統的一些雜散知識點

修改build core envsetup.mk figure out the output directories 在這新增你要修改的新out目錄即可 out dir dev shm out mxr ifeq strip out dir ifeq strip out dir common base...

一些雜的資料

這幾天學的東西太雜了,把接觸到的一些資料鏈結放上來 webkit perspective 3d透視屬性,該屬性可以將平面圖形轉化為具有遠景透視效果的3d圖形,該屬性只能使其孩子元素產生3d,不對自身節點內容產生影響 w3對css3中3d效果的圖景文章 css3的 nth child 偽類選擇器 圖示...