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
文章评论(0条评论)
登录后参与讨论