abort();也表示中断程序,使文件转入内核,利用hexdum -bc core | less查看转存,移除rm core
利用shell脚本cg直接运行程序并包括所有的警告,不用先编译,再运行。
cg文件:
g++ -Wall -W $1 $2 $3 $4 $5 $6 $7 $8 $ 9
./a.out
执行:chmod a+x cg
例如运行该目录下的error.cpp程序只需要
执行:./cg error.cpp
可移植性
g++ -Wtraditional atext,cpp //可以对非ansi结构的发出警告
g++ -ansi atext.cpp //只能通过ansi要求的结构,一般不采用
g++ -o welcome welcome.cpp //改变编译后生成的a.out可执行文件名为welcome.out
g++ -v //中间编译,显示预处理,编译,汇编期间发生所有文件引用
g++ -v -fsyntax-only //单独浏览编译器的警告和错误,没有产生输出
g++ -c //分段编译,没有main()函数的程序生成目标文件.o
g++ -I /include -I/include2 atest.cpp //在include目录中搜索程序的用引号括起来的头文件,-idirafter搜索当前目录后搜索指定的目录
g++ -I- -I/myinclude atest.cpp //同时搜索三角符和引号的头文件
g++ -nostdinc //不让编译器到标准地址寻找标准头
g++ -nostdinc -I ./ -I- -I/myinclude atest.cpp
-nostdinc 表示不在标准地址找,-I ./ 表示在当前目录下找带引号的头文件,-I- -I/myinclude atest.cpp 表示在指定的目录myclude下找带引号和三角号的头文件
优化
g++ -O //O后面带数值1234,代表不同级别的优化
调试
g++ -g welcome.cpp // 编译调试,g后面带数值3表示级别的调试编译
g++ -g -o welcome welcome.cpp //将welcome.cpp 编译为可执行文件命名为welcome
gdb welcome //将程序welcome装入gdb调试器
gdb -quiet(-silent) welcome //清除gdb的开场白直接进入调试
(gdb)help //显示gdb调试指令
(gdb)help data //显示data指令的详细指令
(gdb)run //执行程序
(gdb)list //列出程序的代码即行数
(gdb)break 2 //在第二行设置断点
(gdb)next //运行中停止后一步一的运行
(gdb)continue //运行断点后的所有程序
(gdb)quit //退出调试,或Ctrl+d
(gdb)print list //list为变量,用print检查变量list的值
(gdb)display list //可以在每次暂停的时候自动显示变量的值
(gdb)set rate=0.75 //设置变量rate的值
(gdb)set output - radix 16 //设置输出的进制
(gdb)ptype tax //查看变量tax的类型
xxgdb welcome //进入图形界面编译调试
vi commands
(break 2
run) //指定文件commands中多个调试指令
gdb --command=commands welcome //一起运行
gdb --directory=/home/you/source yourprograme //当源代码和可执行代码不在同一个目录时,可以指定源代码编译
gdb --tty=/dev/ttyp0 welcome //在指定的另一个终端上显示输出,利用指令tty可以显示当前终端号
gdb -q --core=core //将内核文件装入调试器进行分析
全局变量为0
只有char、short、int和long可以指定带符号或无符号。这些类型缺省(无指定情况下)为带符号。浮点对象总是带符号的
函数atof()是ASNII to float
函数atol()是ASNII to long
#define NDEBUG
#include <assert.h> //表示定义符号NDEBUG使assert.h将assert()声明为什么也不干的宏