C語言深入探究函數(shù)的溯源
一、函數(shù)的由來
二、模塊化程序設(shè)計
三、C 語言中的模塊化
四、面向過程的程序設(shè)計
- 面向過程是一種以過程為中心的編程思想
- 首先將復(fù)雜的問題分解為一個個容易解決的問題
- 分解過后的問題可以按照步驟一步步完成
- 函數(shù)是面向過程在 C 語言中的體現(xiàn)
- 解決問題的每個步驟可以用函數(shù)來實現(xiàn)
五、聲名和定義
- 聲明的意義在于告訴編譯器程序單元的存在
- 定義則明確指示程序單元的意義
- C 語言中通過 extern 進行程序單元的聲明
- 一些程序單元在聲明時可以省略 extern
嚴(yán)格意義上的聲明和定義并不相同!
下面看一個例子:
test.c:
#include <stdio.h> #include <malloc.h> extern int g_var; //聲明 extern struct Test; //聲明 int main() { extern void f(int i, int j); //聲明 extern int g(int x); //聲明 struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test)); printf("p = %p\n", p); //g_var = 10; printf("g_var = %d\n", g_var); f(1, 2); printf("g(3) = %d\n", g(3)); free(p); return 0; }
global.c:
#include <stdio.h> /*下面都是定義*/ int g_var = 10; struct Test { int x; int y; }; void f(int i, int j) { printf("i + j = %d\n", i + j); } int g(int x) { return (int)(2 * x + g_var); }
輸出結(jié)果如下:
怎么證明聲明和定義不同呢?我們對 test.c 修改成這樣,將 struct Test* p = NULL; 改成 struct Test* p = (struct Test*)malloc(sizeof(struct Test));
#include <stdio.h> #include <malloc.h> extern int g_var; extern struct Test; int main() { extern void f(int i, int j); extern int g(int x); struct Test* p = (struct Test*)malloc(sizeof(struct Test)); printf("p = %p\n", p); //g_var = 10; printf("g_var = %d\n", g_var); f(1, 2); printf("g(3) = %d\n", g(3)); free(p); return 0; }
可以看到,直接報錯:
delphi@delphi-vm:~$ gcc test.c global.c
test.c:6: warning: useless storage class specifier in empty declaration
test.c: In function ‘main’:
test.c:13: error: invalid application of ‘sizeof’ to incomplete type ‘struct Test’
這是因為編譯器在 test.c 是找不到 struct Test 的定義的,只有 struct Test 的聲明,因此無法知道 struct Test 結(jié)構(gòu)體的信息。(C 語言編譯器編譯 C 文件的時候不會依賴于文件之間的編譯順序)。
六、小結(jié)
- 函數(shù)是面向過程思想在 C 語言中的體現(xiàn)
- 面向過程是由上至下分解問題的設(shè)計方法
- 程序中的定義和聲明完全不同
- C 語言中通過 extern 對程序單元進行聲明
到此這篇關(guān)于C語言深入探究函數(shù)的溯源的文章就介紹到這了,更多相關(guān)C語言 函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言中的fscanf()函數(shù)與vfscanf()函數(shù)使用
這篇文章主要介紹了C語言中的fscanf()函數(shù)與vfscanf()函數(shù)使用,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08C++類模板與函數(shù)模板基礎(chǔ)詳細(xì)講解
C++語言的模板技術(shù)包括函數(shù)模板和類模板,模板技術(shù)是一種代碼重用技術(shù),函數(shù)和類是C++語言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數(shù)模板和類模板,需要的朋友可以參考下2022-08-08C++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)
下面小編就為大家?guī)硪黄狢++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)。小編覺得挺不錯的, 現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06