1 編譯預(yù)處理和宏定
#undef指令刪除前面定義的宏定義。無參宏定義:宏名中沒有參數(shù)。
1,宏定義中宏名用來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一個簡單的代換,字符串可以為常數(shù)或者表達式。有錯誤的話也只能在編譯時發(fā)現(xiàn)
2,宏名不是說明或語句,在行某不必加分號,會連分號也一起置換。
3,宏定義要寫在函數(shù)外,作用域為宏定義命令起到源程序結(jié)束。
4,宏名在源程序中若用引號括起來,則預(yù)處理程序不對其作宏代換。
#include<stdio.h> define OK 100 void main(){ printf("OK"); }
5,宏定義也允許嵌套。
6,習(xí)慣上宏名用大寫字母表示。
7,可用宏定義表示數(shù)據(jù)類型,使書寫方便。
STU body[5],*p;#define INTEGER int;
- 用宏定義表示數(shù)據(jù)類型和用
typedef定義數(shù)據(jù)說明符的區(qū)別:宏定義常用來定義常量,僅僅是簡單的字符串代換,易產(chǎn)生代碼的弊端;
typedef只是為增加可讀性,而起的新名稱,常用來定義關(guān)鍵字、冗長的類型別名,typedef不是原地擴展,具有一定的封裝性,使其更具定義變量的功能。
- 帶參宏定義:
#define宏名(形參表) 字符串
1, 帶參宏定義中,宏名和形參表之間不能有空格出現(xiàn)。
2, 在帶參宏定義中,形式參數(shù)不分配內(nèi)存單元,因此不必作類型定義。有疑問
3,在宏定義中的形參是標識符,而宏調(diào)用中的實參可以是表達式。
4,在宏定義中的形參通常要用括號括起來以避免出錯,最外邊通常需要加括號,否則容易出錯。
5,帶參的宏定義和帶參函數(shù)看起來很相識,但是運算結(jié)果可能不同。
例A:int main(){ int i = 1; while(i <= 5) printf("%d\n",SQ(i++)); return 0; } int SQ(int y){ return ((y)*(y)) }例B:#define SQ(y) ((y)*(y)) int main(){ int i = 1; while(i < 5) printf("%d\n",SQ(i++)); return 0; }兩個示例的結(jié)果不同
6,宏宏定義中可以用來表示多條語句。
-
文件包含
#include <stdio.h>和#include "stdio.h"兩者的區(qū)別是:使用尖括號表示包含文件目錄中去查找,雙引號則表示首先在當前的源文件目錄中查找,若未找到,則到包含文件目錄中查找。
-
條件編譯
1,#if #else #elif #endif
#if expression Statement sequence \#elif expression1 Statement sequence \#elif expression2 。。。。 \#elif expression Statement sequece \#endif
2,#ifdef和#ifndef
- 第一種形式:
#ifdef 標識符
程序段 1 (標識符被宏定義時編譯)
#else
程序段 2(否則編譯)
#endif
- 第二種形式:
#ifndef 標識符
程序段 1(標識符不被宏定義時編譯)
#else
程序段 2(否則編譯)
#endif
- 第三種形式:
#if 常量表達式
程序段 1(如果表達式為真時編譯)
#else
程序段 2(否則不編譯)
#endif
- #和##
- 操作符#通常稱為字符串化的操作符,把它其后的串變?yōu)殡p引號包圍的串。
#define mkstr(s) #s printf(mkstr(I like C));
2)操作符##可以將兩個獨立的字符串鏈接起來。
#define SORT(X) sort_function # # x,將字符串sort_function和x連接起來
-
預(yù)定義宏
固有的五中預(yù)定義宏:
__DATE__ 進行預(yù)處理的日期(“Mmm dd yyyy”形式的字符串文字)
__FILE__ 代表當前源代碼文件的字符串文字
__LINE__ 代表當親源代碼中的行號的整數(shù)常量
__TIME__ 源文件編輯時間,格式 “hh:mm:ss”
__func__ 當前所在函數(shù)名
對于__FILE__ ___LINE__,__func__這樣的宏調(diào)試程序時是很有用的
產(chǎn)生的疑問:
在帶參宏定義中,形式參數(shù)不分配內(nèi)存單元,因此不必作類型定義(不分配內(nèi)存單元是什么意思,想明白參數(shù)之間傳遞是如何分配內(nèi)存的)。
課堂筆記
-
ls命令
ls [選項] (參數(shù))
選項:
-a 查看所有文件或目錄,包括隱藏文件(以.開頭的文件都是隱藏文件)
-l 查看目錄或者文件屬性
-d 列出目錄自身的信息
這三個命令可以混合使用,如:-ld -la
參數(shù)就只文件夾。
-
tree
安裝sudo apt-get install tree
作用:列出此目錄下的所有文件(及子目錄)
作業(yè):
1,了解linux系統(tǒng)的基本組成
*Linux內(nèi)核:硬件1)控制硬件設(shè)備,基本硬件I/O接口,內(nèi)存管理;
軟件2)管理文件系統(tǒng),為程序分配內(nèi)存空間和CPU時間
-
Linux應(yīng)用程序:文本編輯器,編程語言,x Windows,辦公軟件,數(shù)據(jù)庫等。 -
Linux Shell:Shell命令解釋器,他解釋有用戶輸入的命令并把它們送入內(nèi)核執(zhí)行,shell編程語言具有很多語言編程的特點,用此編程語言和其他編程語言具有相同的作用 -
Linux文件系統(tǒng):
普通文件:-
目錄文件:d
鏈接文件:l
管道文件:p
塊設(shè)備文件:b
字符文件:c
2,復(fù)習(xí)ls及tree命令的使用方法
已完成
3,注意安裝linux系統(tǒng)時,必不可少的兩個分區(qū)
swap分區(qū)和根分區(qū)(主分區(qū))
4,了解linux系統(tǒng)下家目錄(宿主目錄)的功能
主要是./和../的區(qū)別
5,預(yù)習(xí)cd,more,less,cat,info,mv,cp,mkdir,rmdir,rm,touch等命令的用法
已完成