(預處理指令,巨集定義,條件編譯,檔案操作)
簡單的來說就是在程式編譯之前需要做的事情
概念:是乙個替換**的預處理指令,可以在編譯之前進行**替換(巨集展開,條件編譯,檔案包含).當需要用一些重複性**或簡單的函式運算時,可以用巨集定義.提高效率
用法:開始替換: #define 被替換內容 替換成的內容
如:#define ka1 6
表示從這行開始下面所有**中的ka1 替換成6
結束替換:
#undef 被替換內容
如: #undef ka1 表示到一行, 巨集定義失效
特點:命名盡量以大寫或小寫k開頭.便於區分.(規範)
被雙引號的引起來的不會被替換
巨集定義只會做**替換,不會關注任何邏輯,容易出現優先順序錯誤(加括號解決).
替換可以設定作用域.如果不設定,作用域則是這行**出現到**的最後一行.
概念:是乙個根據條件編譯**的預處理指令,可以讓一段**只在滿足條件才編譯.提高編譯效率
使用:
#if 條件表示式
#elif 條件表示式
#else
與巨集定義相關:
#ifdef 巨集名 表示定義了巨集
#ifndef 巨集名 表示沒有定義巨集
#endif 結束條件編譯.注意一定要加.
四,什麼時候用?
當一些**只需要在一定條件下編譯時.
五,有什麼特點?
1.條件編譯不能訪問需要編譯後才能執行的**.
2.條件編譯不需要用大括號,所以必須加上結束標識,否則涵蓋下面的所有**.
3.條件編譯一般跟巨集定義配合使用,防止重複包含及交叉包含.
一,是什麼?
是c語言中以.h結尾的檔案,如stdio.h .
二,有什麼用?
用於聲名(描述)乙個函式,把多個**檔案(如a.c;b.c;…)中的函式,宣告在這個檔案中,以便於重用 、防止定義的衝突.
三,怎麼用?
定義: 新建乙個以.h結尾的檔案,把需要用到的函式的聲名直接放在裡面.
引用: 自定義的標頭檔案:#include 「頭檔名.h」
編譯器類庫里的標頭檔案:#include 《頭檔名.h>
四,什麼時候用?
當程式需要由多個c檔案組成時.
五,有什麼特點?
1.在標頭檔案中僅做聲名,不做具體實現
2.在標頭檔案有聲名只能確保編譯成功成.o檔案;但不確保能鏈結成功.
3.自定義的標頭檔案引用時必須要有路徑.
一,是什麼?
是c語言中的乙個預處理指令.
二,有什麼用?
用於把乙個檔案的內容拷貝到這行命令所在的位置.
三,怎麼用?
引用: 自定義的檔案:#include 「檔案路徑和名稱」
編譯器類庫里的檔案:#include 《檔名》
四,什麼時候用?
當程式需要用到別的檔案時.
概念:是對檔案或檔案內容的輸入(讀)與輸出(寫). 檔案操作的函式在中聲名.
檔案的操作流程:
1)匯入標頭檔案 stdio.h
2) 定義檔案指標
3)開啟檔案
4)操作檔案
5)關閉檔案
操作原理:
3、檔案指標
file 結構體
file *fp; 結構體指標
作用:儲存乙個檔案的首位址,指向乙個檔案
4、檔案的開啟和關閉
開啟 fopen(檔名,操作方式);
fopen("a.txt","r");目- cmassyrpkwjxularuygrjqhojbwj/build/products/debug
操作方式:
rwab+t : 讀寫追加二級制讀寫文字
w -- 寫入檔案的時候,如果檔案不存在,則建立存在則覆蓋
r+ w+ wb+ a+
關閉檔案: fclose(檔案指標);
5、檔案操作的函式
1) 字元型資料的讀取和寫入
寫入:fputc('字元',檔案指標);
char c='a';
fputc(c,fp);
讀取:char ch = fgetc(fp); 2)字串型別資料的讀取和寫入
寫入:fputs(陣列名/指標名,fp); //fputs(陣列名,stdout);
讀取:fgets(陣列名/指標名,長度,fp);
fgets實際讀取的字元個數是長度-1
1)遇到\n 結束,遇到eof也會結束
3)資料塊的讀取和寫入
寫入:
fwrite(寫入的變數位址,資料塊的大小,塊數,fp);
int a =123;
fwrite(&a,sizeof(int),1,fp);
struct student stu1;
fwrite(&stu1,sizeof(struct student),1,fp);
讀取:struct student s1;
fread(變數的位址,資料塊的大小,塊數,fp)
fread(&s1,sizeof(struct student),1,fp); //使用s1進行輸出
4)格式化的讀取和寫入
寫入資料和讀取資料按照一定的格式進行
寫入:fprintf(檔案指標,"格式化的字串",變數列表);
fprintf(fp,"%d,%c,%d#",10,'a',20);
10,a,20#10,a,20#10,a,20#
讀取fscanf(fp,"%d,%c,%d#",&a,&ch,&b);
fprintf(fp,"%d,%s,%d",20,"abc",30);
fscanf(fp,"%d,%s,%d",&a,str,&b);
str = abc,30
改成:fprintf(fp,"%d,%d,%s",20,20,"abc");
fscanf(fp,"%d,%d,%s",&a,&b,str);
6、檔案的隨機讀取
設定檔案的頭指標的位置
預設fp是指向檔案的首位址
1)rewind(fp); //fp指向首位址
2)fseek(fp,偏移的距離,起始點);
fseek(fp,32l,seek_set); //從檔案頭部開始,偏移32個位元組
7、檔案的檢測函式
feof() 用來檢測檔案是否到了末尾
如果沒有到末尾 0
到末尾 1
缺點:多執行一次
特點:1.開啟檔案的模式限定操作的方式.
2.開啟操作檔案後一定要關閉檔案,否則容易引起記憶體洩漏.
3.輸入與輸出是相對於操作者而言.
C語言學習內容總結2017 11 7
生存期 針對程式的執行過程。2.在c語言中函式是最小的執行單位。結構體可以進行巢狀定義,但函式不能進行巢狀定義。3.在c語言中其他函式的定義必須放在主函式 主調函式 的前面,或者將其他函式的宣告放到主函式的前面。否則編譯不通過。下面一段 原始檔1中的 include include 標頭.h voi...
C語言學習內容總結2017 11 21(結構體)
1.結構體 下面一段 include using namespace std void main 直接在函式裡面定義 結構體就是在設計新的型別。結構體的寫法如下 struct student 設計學生 結構體 的屬性。對結構體變數的賦初值 int main 那麼為什麼不能在定義結構體的時候對結構體裡...
C語言學習總結
1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...