• 沒有找到結果。

使用標頭檔範例- Header1.h

使用標頭檔範例 使用標頭檔範例

使用標頭檔範例- Header1.h

 定義PI、巨集以及函式的原型如下:

 #include "stdio.h"

 #include "stdlib.h"

 #define PI 3.14159

 //----定義巨集

 #define AreaOfCircle(r) PI*(r)*(r)

 #define Perimeter(r) (2*PI*(r))

 //---定義函式原型

 float testfun1(float r);

 void testfun2();

使用標頭檔範例 使用標頭檔範例 使用標頭檔範例 使用標頭檔範例

 可以一樣透過#include來引用,例如:

 #include "stdafx.h"

 #include "MyHeader.h"

 int main()

 { float r;

 printf("請輸入圓的半徑:");

 scanf("%f",&r);

 printf("圓周長為:%f\n",Perimeter(r));

 printf("圓面積為:%f\n",AreaOfCircle(r));

 system("pause");

 }

使用標頭檔範例 使用標頭檔範例 使用標頭檔範例 使用標頭檔範例

 可以一樣透過#include來引用,例如:



//---以下設計函式--- float testfun1(float r)

 {

 //--在函式中使用巨集

 return (Perimeter(r));

 }

9-4 條件式編譯 條件式編譯 條件式編譯( 條件式編譯 ( (Conditional Compilation) ) ) )

 所謂的條件是編譯就是可以透過前置指令 來引導編譯器作某一個部分程式碼的編 譯。例如:您想要開發一個Linux/

Windows 平台上都可以執行的C程式(就是 有跨平台的問題),雖然理論上C的可攜性 很高,只要將原始碼拿到不同平台上重新 編譯就可以了。

 但實際上由於作業系統或C編譯器上的些 許差異存在,因此可在同一個原始檔案中 標示編譯的條件讓編譯器可以選擇正確的 程式碼做編譯。

9-4 條件式編譯 條件式編譯 條件式編譯( 條件式編譯 ( (Conditional Compilation) ) ) )

 條件式編譯的成員:#if、#endif、#else、

#elif、#ifdef 以及#ifndef。

 各種指示詞的用法說明如下:

 每一個#if都必須搭配一個#endif。

 #elif可以出現任意個在#if與#endif中,但是

#else最多就只能有一個。

 #if、#elif、#else以及 #endif 指示詞可以行成 巢狀結構。

 #ifdef用來檢查某一名詞是否有經過#define定 義;而#ifndef則用來檢查一名詞是否沒有被

#define定義

9-4 條件式編譯 條件式編譯 條件式編譯( 條件式編譯 ( (Conditional Compilation) ) ) )

 #ifdef的用法為:

 #ifdef identifier 用來檢查是否有#define

identifier這樣的敘述存在,事實上也可以用#if 來完成,如下列所示:

 #if defined identifier同理,#ifndef identifier也 就與#if !defined identifier是相同的意思。

條件式編譯 條件式編譯 條件式編譯

條件式編譯( ( (Conditional Compilation) ) ) ) 範例 範例 範例 範例

 問題描述問題描述問題描述問題描述::使用條件式編譯的指令來展示如何 運用。

條件式編譯 條件式編譯 條件式編譯

條件式編譯( ( (Conditional Compilation) ) ) ) 範例 範例 範例 範例

 #include "stdafx.h"

 #include "stdlib.h"

 #include "stdio.h"

 #define OS //---定義OS

 int main()

 {

 #if defined OS //--檢查是否有定義OS

 #define STACK 200 //---如果有定義OS,則STACK定為

 printf("OS有定義\n"); //--可以撰寫C程式碼

 #else

 #define STACK 100 //---否則STACK定為

 printf("OS未定義\n");

 #endif

 printf("STACK=%d\n",STACK);

 system("pause");

條件式編譯 條件式編譯 條件式編譯

條件式編譯( ( (Conditional Compilation) ) ) ) 範例 範例 範例 範例

 #undef OS //--使用#undef取消#define對OS的定義

 #undef STACK //--使用#undef取消#define對STACK的定義

 #if defined OS //---OS已被#undef取消定義了

 #define STACK 200

 printf("OS有定義\n");

 #else

 #define STACK 100

 printf("OS未定義\n");

 #endif

 printf("STACK=%d\n",STACK);

 system("pause");

 }

有傳回值的函式設計與使用

 宣告時必須指定傳回的資料型態,例如:

 int getsum()

 使用return敘述傳回資料時可以使用小括號,也 可以不使用,例如: return(ret_data) 或是return

ret_data來回傳資料。其中的ret_data必須是函式

規劃的傳回資料型別,或是允許隱含資料轉換 的相容資料型別,否則將會發生錯誤。

 極建議程式設計時能統一函式宣告與回傳的資 料型別,因為如果回傳的值過大而造成溢位

(Overflow)的錯誤發生時並不會引發編譯時期或

執行時期的錯誤。但是執行的結果就會不符合 預期。

有傳回值的函式設計與使用

 在主程式中呼叫有傳回值的函式一樣是直接使 用函式的名稱即可,但是因為所呼叫的函式有 傳回值,因此可以使用一個同型別的資料變數 來接收(如果型別不同也可以透過隱含或是強制 型別轉換的方式),例如上述程式中:



int sum=getsum();

 這一行程式就是在宣告整數變數sum時順便給予 初始值,而初始值的來源就是getsum()函式的回 傳值。事實上,如果傳回的值無其他作用而只 是要簡單的顯示,那麼本範例的程式也可以簡 化成一行:



printf("1加到總和:%d\n",getsum());

相關文件