原创 指针和gcc学习

2010-5-6 20:55 2570 8 8 分类: MCU/ 嵌入式

i.e.也就是


ptr+1后移一个类型的长度


×astterisk


macro 宏 编译之前先编译,就是等量替换


unary 一元操作符     一元操作符的优先级大于二元操作符


变量是从里面可以看到外面,外面看不到里面


reference 引用


库文件是编译好的目标文件,链接的时候要到库文件,编译的时候不用


fron_end 前端


看gcc在在那个目录 which gcc


-c 产生目标文件,c是compile编译的意思


写好的程序是先编译成.o的目标文件,然后再用链接器ld链接成可执行文件


werbose 冗长 -v显示编译的所有信息


$gcc -Wall hello.c -o hello


$gcc -Wall /usr/lib/libm.a -o cal


=$gcc -Wall -lm -o cal


-lNAME=标准库中libNAME.a


implicit 隐式的


pow(a,b)求指数


-I目录  找到额外的头文件


-L目录 找到额外的库文件


可以用#include ''/opt/mysoft/include/hello.h"在双引号中加入目录这是绝对路径


还可以加入相对路径#include "include/hello.h"


$gcc -Wall -I/opt/mysoft/include/hello.h -o hello


环境变量C_INCLUDE_PATH放头文件


环境变量LIBRARY_PATH放静态库文件


环境变量LD_LIBRARY_PATH放动态库文件


ar创建自己的静态库


$ar cr libNAME.a file1.o file2.o file3.o .....c是create ;r是replace


$ar t libNAME.a 看库中有多少个目标文件


$gcc -Wall main.c -L. -lhello -o main 库文件在当前目录下


外部库分为静态库(.a或.lib)和动态库(共享库)(.so或.dll)


静态库在链接的时候把静态库里面的机器码复制到可执行程序中,调用一次复制一次,程序在执行的时候浪费内存,而动态库在链接的时候复制一个表(主要是指针)到可执行文件中,程序在运行到动态库中的的函数的,把这段代码复制到内存中,当别的程序也调用这个函数的时候,它会直接到内存中找这段空间,不用再次复制,节省的内存空间,由于生成的可执行文件比较小,同时也节省了磁盘空间.


mechanism 机制


动态库比静态库的稍微慢一点


两种库的名字相同的情况下gcc默认的是先调用动态库


dialect 方言


gcc支持nested function 嵌套函数(函数中定义函数),variable ——size array 可变类型数组


-ansi  -pedentic 使用ANSI标准


-std c语言标准


-std=c89 (89年的标准)


-std=c99 (99年的标准)


$gcc -Wall -ansi _D_GNU_SOURCE pi.c -o pp  意思是使用标准c编译,但是用gcc的库


可变数组意思就是数组值的个数是可变的,定义的时候不用指定具体长度是7还是8什么的


严格使用标准c编译用选项-ansi -pedentic


-Wcommand 检查注释是否循环嵌套了   command cut 注释


一般用条件编译#if 0 ...........#endif 进行注释大段程序,避免出现循环嵌套


-Wformat 检查格式错误


-Wunused检查定义过了但没有使用的变量


-Wimplicit检查调用了的函数有没有声明


-Wreturn-type 检查有没有返回值,没有返回值的函数是不是void类型


-W -Wconversion -Wshadow -Wwrite-strings -Wcast-qual  -Wtraditional 是其他的警告命令可以自己查阅相关资料


preprocessor预处理,简单的说就是字符串替换, 编译时把宏和包含头文件中的代码复制过来,它处理的是以#开头的东西


条件编译如果程序有#ifdef test...........#endif


$gcc -Wall -Dtest dtest.c -odt


$cpp -dM /dev/null 查看文件中有多少宏定义


-DNAME=VALUE    把宏定义赋值,如果不赋值缺省的情况下值是1


-NMAME= "1+2"    赋值可以是表达式


$gcc -E teat.c 只对源文件进行预处理


$gcc -Wall -c -save_temps hello.c   


-save_temps  编译的时候保存临时文件包客一些预处理以后的文件


.i是预处理后的文件


Debug版本是调试版本有很多的调试信息在里面,有点大


Release版本是发行版本,精简版。


referred to 被称作


data-flow 数据流


优化能帮忙找出隐藏比较深的的bug,会检查出没有初始化的变量


编译c++程序的时候用g++


.cc .cpp .cxx 是c++的源文件


$g++ -Wall hello.cc -o hello


cat -n hello.cc|more


$gcc -Wall -S hell.c hell.i 产生汇编程序


$as hello.s -o hell.o  汇编程序编程机器代码


ELF COFF不同形式的可执行文件


LSB 一个字节地位在前


MSB一个字节高位在前


not stripped  可执行文件里包含符号表


nm 查看符号表


ldd a.out 找动态库


gprof工具,程序执行的时候记录函数执行的时间和执行次数


$gcc -Wall -pg collatz.c


$gprof a.out


gcov工具,看程序中的哪些代码没有被执行


$gcc -Wall -fprofile-arcs -ftest-coverage  cov.c


$./a.out


$gcov cov.c

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条