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