Home » 未分类 » Linux C 学习笔记 一

Linux C 学习笔记 一

嵌入式Linux C

www 原则:what why how

编译型语言

源代码 –>编译器–>二进制文件

解释型语言

shell html

 

<<C Programing language>>

 

语言关注度排行

c

java

c++

objective -c(oc)

main 函数—>程序的入口

程序一个入口,一个出口(多个位置)

 

main函数的一些写法

main() —不推荐

main(void) —不推荐

void main() —不推荐

int main(void) —标准

int main(int,char**) —没有参数名,不推荐,二级指针

int main(int,char*[]) —不推进啊

int main(int argc,char **argv) —不推荐

int main(int argc,char *argv[]) —标准

int main(int argc,char argv[],char *env[]) –env环境变量

 

argc 代表命令行参数个数,

argv 参数列表

 

文件类型

.c c语言源文件source

*.cpp *.cxx c++语言源文件

.h 头文件header

.o 目标文件object,已经过编译的二进制代码,但未链接

*.so *.a 库文件libraryfor Linux.a问静态库 .so 动态库、共享库

*.dll (for windows)

.png 杂项

.jpg

.ini

 

 

项目结构

src 源文件

include/inc 头文件

obj 目标文件

lib 库文件

bin 二进制可执行文件

 

 

gcc

-o 指定输出文件名

-E 在预处理期完成后就停止编译过程,得到 .i文件

-S 在编译期完成后停止编译过程,*.s

-c 在汇编期完成后停止编译过程,*o

-I 指定头文件的路径

 

多行注释匹配原则

与上一个距离最近且未被匹配的符号进行匹配

多行注释不可嵌套

需要注释多行注释可使用条件编译

条件编译(预处理指令)

#if 0

/*写在里面的都将被删除

#endif

c 语言有两种条件逻辑,一种是0 一种是非0

 

#include <头文件>

#include “头文件”

1C标准库函数的头文件

2、由程序员自定义的头文件

3、第三方的库的头文件

 

<>和“”区别在于在编译的过程中,头文件的搜索路径不同

<> 优先从系统头文件路径开始搜索

“”优先从用户制定的头文件路径开始搜索

 

预处理

gcc -E -o example.i example.c 指到这个预处理期过程就停止,得到的就是

执行的是文本操作,

a.展开include指令 ,把所有包含的头文件都进行引导

b.条件编译 解析#if的内容,将逻辑假内容删除

c.宏展开

#define 定义的宏名都替换成其相应的值

d.删除注释

c语言中定义两个相同的变量,会报错,从定义

 

 

编译阶段

把已经预处理后的代码编译生成汇编代码

gcc -S -o example.s example.i

汇编阶段

编译汇编代码 vi 使用的是asscii格式查看文本,可以使用 bvi安装插件查看二进制代码

gcc -c -o obj/helloword.o src/helloword.c

链接阶段

将目标文件和库文件、其他目标文件进行链接,生成可执行文件

gcc -o bin/helloword obj/helloword.o

 

C语言的算法

有穷性,确切性,输入,输出,可行性

 

-1%256= 255 ==> (-1+256)%256=255

 

printf()函数

%d 有符号十进制整数 int

%c 字符 char ‘a’

%s 字符串 char * “aaaa”

%o 有符号八进制

%x 十六进制

%p 地址指针 0xffffffff

%f 浮点数 float

32位系统—> 寻址空间为32bits —>实际操作只有3Gb

0x0000 0000 0000 0000 0000 0000 0000 0000

…..

0xffffffff ………

 

0x0000 0000

用户空间

0xc000 0000

内核空间

0xffff ffff

 

所有进程运行在内核态

 

库函数的使用

%s/;$/\n{\n}/g 替换全部的;结尾的 然后换行{换行} 替换全部

 

 

执行编译

gcc -c -o obj/fun.o src/fun.c -Iinclude

gcc -c -o obj/main.o src/main.c -Iinclude

-Iinclude 表示-I后面进阶自己写的头文件的目录

执行链接

gcc -o bin/main obj/main.o obj/fun.o 

This entry was posted in 未分类. Bookmark the permalink.