9.10 二分查找 gcc makefile gdb调试

 二分查找的迭代和递归实现:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int find1(int *a, int low , int high , int key)//迭代二分查找
  4. {
  5. int mid = 0;
  6. while (low <= high)
  7. {
  8. mid = (low+high)/2;
  9. if (a[mid] == key)
  10. return mid;
  11. else if (a[mid] < key)
  12. low = mid + 1;
  13. else
  14. high = mid -1;
  15. }
  16. return -1;
  17. }
  18. int find2(int *a, int low , int high , int key) //递归二分查找
  19. {
  20. if (low > high)
  21. return -1;
  22. int mid = (low+high)/2;
  23. if (a[mid] == key)
  24. return mid;
  25. else if (a[mid] < key)
  26. find1(a,mid+1,high,key);
  27. else
  28. find1(a,low,mid-1,key);
  29. }
  30. int main()
  31. {
  32. int array[13] = {2,6,8,12,32,64,67,78,98,104,120,134,140};
  33. int key = find2(array,0,12,140);
  34. printf("%d\n",array[key]);
  35. return 0;
  36. }



gcc常用选项

gcc是如何知道文件类型呢?通过文件扩展名判断文件类型


makefile规则遵循以下通用形式


target:dependency [dependency[…]]                           //dependency是依赖的意思

command

command

[…]

每个command第一个字符必须是tab键,而不是空格键,不然make会报错并停止。

稍微复杂的makefile,内容如下:


start:hello.o

gcc -o hello hello.o

hello.o:

gcc -o hello.o -c hello.c

target start后面的hello.o代表其下的command依赖与hello.o这个target。

所以make先执行了hello.o这个target下的command。

在makefile使用变量:


CC=gcc

SRCS=hello.c

OBJS=$(SRCS:.c=.o)

EXEC=hello

start:hello.o

$(CC) -o $(EXEC) $(OBJS)

@echo ‘---------------ok---------------‘

hello.o:

$(CC) -o $(OBJS) -c $(SRCS)

clean:

rm -f hello.o

增加变量CC,SRCS、OBJS、EXEC,即每个引用变量CC的地方的展开成变量的值。

OBJS=$(SRCS:.c=.o),意思是将SRCS变量中的.c替换为.o。

Makefile的模式规则


.SUFFIXES: .c .o    表示任何x.c文件与x.o关联

.c.o:     表示make定义了一条规则,任何x.o文件都从 x.c编译而来

make定义了一些有用的预定义变量

在makefile使用自动变量和模式规则的例子并且可以编译多个源文件

.SUFFIXES:.c .o

CC=gcc

SRCS=hello.c\

pub.c

OBJS=$(SRCS:.c=.o)

EXEC=hello

start:$(OBJS)

$(CC) -o $(EXEC) $(OBJS)

@echo ‘---------------ok---------------‘

.c.o:

$(CC) -o [email protected] -c $<

clean:

rm -f $(OBJS)

gdb调试一定要加上-g选项:


gdb 程序名 [corefile]    corefile是可选的,但能增强gdb的调试能力。

Linux默认是不生成corefile的,所以需要在用户profile文件中添加

vi  .profile

ulimit -c unlimited

. .profile

gdb app core

来自为知笔记(Wiz)

时间: 2024-09-30 05:26:49

9.10 二分查找 gcc makefile gdb调试的相关文章

使用gcc编译gdb调试

gcc 在linux系统中,默认是没有安装gcc编译器的,可以通过命令 rpm -q | grep gcc 来查看.安装命令为: yum -y install gcc 安装后,编写一个.c结尾的文件. gcc test.c 就会默认输出一个a.out的输出文件,这个输出文件就是可执行文件. 如果加上-o选项,则可以自定目标文件. gcc -o test test.c test就是它的可执行文件. 一般都默认加上-Wall 选项,可以自动提示一些出错警告的信息. gcc -Wall -o test

算法(第4版)-1.1.10 二分查找

总结:本小节通过二分查找的例子展示本书学习新算法的基本方法,研究新算法的原理.用例.必要性(模拟实际情况)和性能. 重点: 1.二分查找: import java.util.Arrays; public class BinarySearch { public static int rank(int key, int[] a) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { // 被查找的键要么不存在,要么必然存在于a[lo..hi]

gcc编译, gdb调试, makefile写法

//test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } ====================================== 一. 1. 编译过程:预处理(processing)->编译(compilation)->汇编(assembly)->Linking 2. 预处理: gcc -E test.c -o test.i / gcc -E t

gcc编译与gdb调试简要步骤

http://blog.chinaunix.net/uid-24103300-id-108248.html 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程度的优化,编译成汇编代码(.s.S) l 用汇编器把汇编代码进一步生成目标代码(.o) l 用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件 格式: l gcc -E test.c//预处理阶段 l Gcc -

用 gdb 调试 GCC 程序【转】

用 GDB 调试程序 原著:Rick McMullin 用 gdb 调试 GCC 程序 转自:http://blog.csdn.net/bonnshore/article/details/7955422 Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能: 它使你能监视你程序中变量的值. 它使你能设置断点以使程序在指定的代码行上停止执行.

gcc gdb调试 (一)

用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是

gdb调试带参数程序(转:笑笑小白,cnblog http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html)

一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > cc -g hello.c -o hello > g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,所代替的全是 运行时的内存地址.当你用 -g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他. 启动 GDB的方法有以下几种

GCC编译器和GDB调试器常用选项

http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                   #将hello.c编译成hello可执行文件 gcc -E hello.c -o hello.i              #将hello.c 转换成预处理后的文件hello.igcc -S hello.c -o hello.S              #将hello.c 转换成汇编文件 h

Linux gcc/g++下GDB调试及其调试脚本的使用

GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX/Linux平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2.可让