5 函數的調用過程
- 在c語言中不允許函數嵌套
6 函數的聲明與常見終端命令
-
函數需要先聲明再調用,也就是說c語言中的函數聲明都要寫在調用它的函數之前,這點與java,javascript 很不同,但是可以先聲明函數頭,在寫函數體,例子如下
int sum(num1,num2); //先聲明的函數頭int main(){ int a,b; int result sum(a,b);//調用函數 printf("%d", result); } int sum(num1, num2){//對聲明函數的定義 return num1 + num2; }
函數聲明就是把函數頭拷貝到調用這個函數的代碼之前
函數聲明的作用,就是告訴編譯器函數已經存在了
-
為什么函數的調用會被當作函數的聲明?
int sum(int num1, int num2);
//char numberOfCharInTwoChar(char c1, char c2) //如果這里聲明就沒問題了
int main(){
int a,b;
int result = sum(a, b);
printf("resut = %d",result);
char num = numberOfCharInTwoChar('a', 'A'); //這句會被多做一個int類型的函數聲明,而不是函數調用
return 0;
}int sum(int num1, int num2){ return num1 + num2; } char numberOfCharInTwoChar(char c1, char c2){//這句將會報重復聲明錯誤 return c1 - c2; }
- 這是因為在c語言中一個函數如果沒有說明它的返回值類型,編譯器默認認為它是int返回類型
- 所以當函數不寫返回值聲明必須返回一個整數,否則也會報錯。
-
常用終端命令
- touch <文件名> 創建文件
- open <文件名|文件夾名> 打開文件并編輯
- rmdir <文件夾名> 刪除文件夾
- who 查看當前目錄屬于誰
-
終端編譯
- cc -c <*.c> 編譯源碼,執行后會生成 *.o
- cc <*.o> 連接文件,執行后會生成 *.out
- ./ <*.out> 執行編譯完的程序
7 #include 預編譯指令
- 終端命令 open a.txt 可以打開文件
- 在終端下編譯C語言文件
cc -c main.c
-
.c
后綴為源碼;.o
后綴為編譯后文件 -
cc main.o
生成可執行文件 -
#include
作用:在預編譯的時候拷貝#include
后面文件內容到#include
指定位置 -
#include
是預編譯指令,預編譯指令就是在編譯之前就需要解析處理的指令 -
#include "" 與 #include <>
的區別,include“”- 在當前目錄中查找,如過在當前目錄中沒找到
- 去編譯器的include目錄中查找,如果還沒找到
- 就去系統的include目錄中查找,如果還沒找到
- 會報錯
-
#include <文件名稱>
就比"" 少了第一步超找操作- 去編譯器的include目錄中查找,如果還沒找到
- 就去系統的include目錄中查找,如果還沒找到
- 會報錯
- 總結:當你需要包含系統庫文件時使用<>,當你包含項目中的文件使用"";
8多文件開發(模塊開發)
如下這樣互相引用并且聲明函數會很麻煩
所以c語言中專門使用.h 文件來存放函數聲明,并且使用include 相互引用。
-
.c 文件與 .h 文件是成對出現的并且同名。
main.cinclude <stdio.h> include "my.h"http://引用了聲明就可以不用在顯示引用聲明了 //int sum(int n1,int n2); //聲明my.c中的函數 //int minus(int n1, int n2); //聲明my.c中的函數 int main(){ int result = sum(10,20); int result2 = minus(30,10); printf("result = %d, result2 = %d", result, result2); } ---------------------------------- my.h //.h 文件就是用來聲明函數的 int sum(int n1,int n2); int minus(int n1, int n2); ---------------------------------- my.c include "my.h" //引用自己的函數定義 為了在函數內部調用自己的函數 int sum(in1 n1, int n2){ return n1 + n2; } int minus(int n1,int n2){ return n1 - n2; } ---------------------------------- your.c include "my.h" //int sum(in1 n1, int n2);//聲明my.c中的函數 int avg(){ return sum(10,10) / 2; }