C C學習筆記 函式與程式結構

2021-07-02 22:19:41 字數 4257 閱讀 2983

返回值型別函式名(引數宣告表) 

{ 宣告和語句

函式定義不能位於另乙個函式體內。 

如果函式定義中省略了 「返回值型別」,則預設為 int 型。 

被呼叫函式通過return語句向呼叫著返回值,return語句的後面可以跟任何表示式: 

return 表示式;

必要時,表示式將被轉換為函式的返回值型別。表示式兩邊的括號可選。表示式也是可選的(此時,不會返回值,只會返回控制權)。 

如果函式帶有引數,要宣告他們;如果沒有,用void。 

題外話:逆波蘭表示法 所有運算子都跟在運算元後面 如:( 1-2 ) * (4 +5) 表示為:1 2 - 4 5 + * 

名字的作用域指的是程式中可以使用該名字的部分。
不同函式中宣告的具有相同名字的各個區域性變數之間沒有任何關係。(

全域性變數和區域性變數最好不要同名;自動變數(包括形參)可以隱藏同名的外部變數與函式。變數的識別是靠位址實現的)

外部變數或函式的作用域從

宣告它的地方開始,到

其所在的(待編譯)檔案的末尾結束。所有原始檔(.c)中,乙個外部變數只能在某個檔案中定義一次,而其他檔案可以通過extern宣告來訪問它。

外部陣列變數的定義中

必須指定陣列的

長度,但extern宣告則不一定需要

外部變數的

初始化必須出現

在其定義中。(注:初始化和賦值的區別!)

考慮定義和宣告在原始檔之間的共享問題,盡可能把共享的部分集中在一起,這樣就只需要乙個副本,改進程式時也容易保證程式的正確性。——《c程式語言設計》

作用:

register宣告告訴編譯器,該變數在程式中使用頻率較高

該變數放在機器的暫存器中,使程式更小、更快。

無論暫存器變數實際上是不是存放在暫存器中,位址均不可訪問

變數定義性宣告:inta;

變數引用性宣告:externinta;

變數賦值 :a = 7;

變數初始化 : int a =7;

初始化 =

變數定義+賦值

對於未顯式初始化的外部變數靜態變數,都將被「自動」初始化為0

對於未顯式初始化的區域性變數暫存器變數,不會「自動」初始化;

初始化必須使用常量表示式

預處理器是編譯過程中單獨執行的第乙個步驟。

7.1 檔案包含指令include

處理大量的define和宣告更加方便。

#include語句行 都將 被替換為 由 檔名

指定的檔案的內容。(

相當於  #define檔名檔案內容)

7.2巨集替換define

最簡單的巨集替換:

#define名字 替換文字

該語句後續所有出現

名字記號的地方都將被替換為替換文字

。也可以將長替換文字分成若干行,中間利用「

反斜槓符 \」連線。如果替換文字中有空格,請注意使用括號,否則會出現一些錯誤

例:#defineaabcdefgh\ 

ijkmnopq\

rstuvwx\

yz

替換只針對記號進行,對括在引號中的字串不起作用

帶參巨集定義

例:#definemax(a,b) ( ( a ) > ( b )  ?  a  :  b )

呼叫時:max( p + q, r + s )= ( ( p + q ) > ( r + s ) ? ( p + q ) : ( r + s ) )

注意:該種呼叫時,作為引數的表示式要重複計算兩次。如果是有」自增/自減「運算子的話更加明顯

例:max( i++ , j++ );
注意:另在替換文字中的「括號」必須使用恰當!!

例:#defineplus(a,b)a + b

plus(1,2) * plus(3,4) = 1 + 2 * 3 + 4(可以想見不是想要的結果)

可以使用

#undef指令取消名字的巨集定義

形參 不能用 帶引號的字串 替換。但在

替換文字中,引數名以#作為字首則結果將被擴充套件為由 實參 替換 該引數的帶引號 的 字串。

例:#definedprint(expr)printf(#expr " = %g\n ", expr)

呼叫時:dprint(x/y)= printf("x/y" " = %g\n ", x/y)= printf("x/y = %g\n", x/y) ;

在實參中,每個雙引號"都將被替換為\"反斜槓\被替換為\\

可以使用 ## 連線兩個引數:

#definepaste(front, back)front##back(可以存在空格)

呼叫時:inti = paste(1,2) = 12;

7.3 條件包含

#if 常量表示式

#elif常量表示式

#else

....

#endif

同if...else的用法,只不過最後必須使用#endif結尾。

除了#if,還有#ifdef,#ifndef,用於測試某個名字(函式名,變數名,標頭檔案等)是否已經定義。對頭檔案而言,即確認該標頭檔案是否已經被包含過。

函式與程式結構

4 標頭檔案 5 初始化 6 c預處理器 函式定義形式如下 函式定義 返回值型別 函式名 引數宣告表 return語句 return exp 程式 可以看作變數定義和函式定義的集合。函式之間的通訊可以通過引數 函式返回值以及外部變數進行。被呼叫函式通過return語句向呼叫者返回值。return語句...

筆記 C語言 函式與程式結構

函式的定義形式如下 返回值型別 函式明 引數宣告表 函式定義中的各構成部分都可以省略。最簡單的函式如下所示 dummy 該函式不執行任何操作也不返回任何值。這種不執行任何操作的函式有時很有用,它可以在 程式開發期間用以保留位置 留待以後填充 如果函式定義中省略了返回值型別,則默 認為 int 型別。...

函式與程式結構 例題

建立乙個逆波蘭表示法的計算器 eg 1 2 4 5 逆波蘭表示法 12 45 簡單 如下 只能完成基本的加減乘除,取模運算 include include 為了使用atof 函式 include define maxop 100 運算元或運算子的最大長度 define number 0 標識找到乙個...