Linux下C編程
Linux下C編程
一。Linux簡(jiǎn)介 三。指針、函數(shù)及自定義數(shù)據(jù)類型
a) 指針變量
Int *p1,*p2;
Ing *pn;
Pn=&n;
b) 指針運(yùn)算
Int a[5]={1,2,3,4,5};
Int *p1 = &a[1];
這樣指針p1就指向數(shù)組a的第二個(gè)元素
c) 指針類型轉(zhuǎn)換
首先定義指針變量,然后強(qiáng)制轉(zhuǎn)換
Char *pc;
Int *pi;
Pi=(int *)pc;
d) 指向指針的指針
Int **pp;
e) 函數(shù)聲明
Int max(int,int);
Int max(int x,int y)
{
Int t;
T=(x>y)?x:y;
Return t;
}
f) 局部變量
Int func()
{
Int I;
}
全局變量
Int x;
Int main()
{
}
g) 變量的靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)
全局變量即是靜態(tài)變量,定義時(shí)就分配存儲(chǔ)單元一直到程序結(jié)束
函數(shù)的形式參數(shù)即是動(dòng)態(tài)變量,使用時(shí)才分配存儲(chǔ)單元。
自動(dòng)變量auto、外部變量extern、靜態(tài)變量static、寄存器變量register
默認(rèn)都是自動(dòng)變量
Auto int I; auto可以省略
外部變量即已用其他源文件中的變量
靜態(tài)全局變量表示不能被其他源文件使用,與extern相反。
靜態(tài)局部變量定義在函數(shù)內(nèi),但在函數(shù)結(jié)束后會(huì)繼續(xù)駐留內(nèi)存,并影響函數(shù)的下次調(diào)用。
寄存器變量是放在cpu寄存器內(nèi),只有自動(dòng)局部變量可以定義為寄存器變量。
h) 外部函數(shù) 可以被其他源文件調(diào)用
Extern int add()
{
}
內(nèi)部函數(shù)只能被本文件的函數(shù)調(diào)用
Static int add()
{
}
i) 函數(shù)指針
Void (*p)(int x)
j) 結(jié)構(gòu)體
Struct name
{
Int id;
}
定義結(jié)構(gòu)體
Struct student a;
直接定義結(jié)構(gòu)體變量
Struct
{
Int id;
} a;
結(jié)構(gòu)體初始化
Struct student a = {
23,
};
結(jié)構(gòu)體指針
Struct student *p;
結(jié)構(gòu)體引用
a. id
a->id
(*p)。id
p->id
嵌套結(jié)構(gòu)體
Student.address.zipcode=200000
a)shell變量
$0 腳本名稱
$# 命令行參數(shù)個(gè)數(shù)
$* 所有命令行參數(shù)
$[1-n] 第1-n個(gè)參數(shù)
$$ 當(dāng)前參數(shù)的標(biāo)示符
$! 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程標(biāo)示符
$? 命令退出狀態(tài)
二。C語(yǔ)言基礎(chǔ)
a) 開(kāi)發(fā)流程
編輯源文件->編譯源文件->連接目標(biāo)文件和庫(kù)文件->運(yùn)行
b) 數(shù)據(jù)類型
有字符型char、整形 int、浮點(diǎn)型 float、雙精度浮點(diǎn)型 double、空值 void
獲取數(shù)據(jù)類型的字節(jié)數(shù) sizeof
c) 運(yùn)算符
加+、減-、乘*、除/、取余%、自增++、自減--
++x 等于 x=x+1;
++x先執(zhí)行加一,再引用數(shù)值,x++先引用數(shù)值,再加一
d) 關(guān)系運(yùn)算符和邏輯運(yùn)算符
< > == >= <= !=
&&|| !
e) 位運(yùn)算符
與& 或| 異或^ 取反~ 左移《 右移》
f) 表達(dá)式
If()
{
Statement;
}
Else if()
{
Statement;
}
Else
{
Statement;
}
Switch()
{
Case 常量1:
Statement;
Brea;
Case 常量2:
Statement;
Break;
Default:
Statement;
}
For(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
Statmennt;
}
While(表達(dá)式)
{
Statement;
}
Do
{
Statement;
}
While(表達(dá)式)
g) 跳轉(zhuǎn)語(yǔ)句
Break 1)switch中中止某個(gè)case 2)循環(huán)結(jié)束
Continue 結(jié)束本次循環(huán)
h) 數(shù)組
Int array[5]={1,2,3,4,5};
Int b[2][3]={{1,2,3},{4,5,6}};
i) 字符組
Char str[5]={‘h’,’e’,’l’,’l’,’o’};
j) 宏定義
#define PI 3.1415926
#define MAX(a,b) (a>b)?a:b
宏名和形式參數(shù)之間不能加參數(shù)
k) 文件包含
#include <文件>
在系統(tǒng)目錄中找,調(diào)用系統(tǒng)庫(kù)文件
#include “文件名”
在當(dāng)前目錄中招,再找到系統(tǒng)目錄中招,用戶自己的庫(kù)文件
l) 條件編譯
#if
#else
#endif
#ifdef
#else
#endif
k) 共同體
Union name
{
}
共同體和結(jié)構(gòu)體區(qū)別:共同體存儲(chǔ)是采用覆蓋技術(shù),不同數(shù)據(jù)類型成員占用同一段內(nèi)存空間。某一時(shí)間點(diǎn),共同體只能存儲(chǔ)某一成員信息。
l) 枚舉
Enum week
{
SUNDAY,MONDAY,TUESDAY
}
枚舉定義
Enum week w;
枚舉引用
A=Tuesday
Print的話,出來(lái)時(shí)2
四。數(shù)據(jù)結(jié)構(gòu)
a) 線性表
b) 棧
只允許在一段插入和刪除數(shù)據(jù)的線性表
c) 隊(duì)列
先進(jìn)先出的線性表,允許在一段插入,另一端刪除
d) 二叉樹(shù)
e) 查找算法
f) 排序算法
五。文本編輯器
a) 光標(biāo)移到{,然后輸入%,會(huì)跳轉(zhuǎn)到匹配的}
b) 自動(dòng)補(bǔ)全
Pr
Ctrl+p或者ctrl+n
c) 自動(dòng)縮進(jìn)
:set cindent shiftwidth=4;
手動(dòng)縮進(jìn)
在某行打==
=G所在行到文件底部自動(dòng)縮進(jìn)
六。GCC編譯器
a) Gcc基本選項(xiàng)
-E 預(yù)處理后及停止
-S 編譯后停止
-c 編譯或匯編源文件
-o file 制定輸出文件
b) 警告選項(xiàng)
-Wall 啟用所有警告信息
-Werror 發(fā)生警告時(shí)取消編譯操作
-w 禁用所有警告信息
c) 優(yōu)化選項(xiàng)
-O0 不優(yōu)化
-O或-O1 基本優(yōu)化
-O2 除了-O1外,還額外調(diào)整
-O3 除-O2外,還處理器優(yōu)化
-Os 生成最小執(zhí)行文件,用于嵌入式領(lǐng)域
d) 頭文件包含變量和函數(shù)聲明,不包含定義函數(shù)的實(shí)現(xiàn)
函數(shù)具體是現(xiàn)在庫(kù)文件中,分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)。
靜態(tài)庫(kù)編譯連接時(shí)將源代碼加入到可執(zhí)行文件中,后綴一般為。a
動(dòng)態(tài)庫(kù)程序執(zhí)行時(shí)有鏈接文件加載,一般為。so
七。調(diào)試工具
a) 啟動(dòng)gdc
$gdb
退出
Quit
b) 載入程序
$gdc example
(gdb) file example
列出源代碼
(gdb) list
執(zhí)行程序
(gdb) r
斷點(diǎn)處繼續(xù)運(yùn)行程序
(gdb) c
幫助
(gdb) help
在第九行設(shè)置斷點(diǎn)
(gdb) b 9
查看斷點(diǎn)
(gdb) info break
刪除斷點(diǎn)
(gdb) d 1
刪除制定行上的斷點(diǎn)
(gdb) clear 9
禁用和恢復(fù)斷點(diǎn)
(gdb) disable 1
(gdb) enable 1
查看變量
(gdb) p sume
自動(dòng)到斷點(diǎn)處顯示變量
(gdb) display sum
顯示變量數(shù)據(jù)類型
(gdb) whatis x
修改變量值
(gdb) set sum = 100
單步執(zhí)行程序 step
(gdb) s
繼續(xù) next
(gdb) n
退出 return finish
直接退出
(gdb) return
退出前執(zhí)行完程序
(gdb) finish
執(zhí)行到某行
(gdb) until
跳轉(zhuǎn)某行
(gdb) j 15
強(qiáng)制調(diào)用函數(shù)
(gdb) call printf(“”)
查看堆棧信息
backtrace
(gdb) bt
Frame
(gdb) f 1
查看當(dāng)前棧信息
(gdb) info frame
查看源程序信息
(gdb) info source
查看寄存器
(gdb) info registers
查看匯編代碼
(gdb) disassemble printinfo
八。多文件項(xiàng)目管理Make,makefile,automake
九。Linux C基本應(yīng)用