Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831724
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2011-11-24 23:37:22

风之舞原创,转载请注明来源
=================================
内容简单,没有写一个完整的菜单,仅仅是通过这个例子来解答通过函数指针来调用相应函数的方法。

系统目录
./
./main
./incl

程序文件:

main/main.c
  1. #include <Win.h>
  2. #include <menu.h>

  3. int main ( void )
  4. {
  5.         int i;
  6.         WINDOW *w_main;
  7.         WINDOW *w_top;
  8.         WINDOW *w_topmenu;
  9.         initscr();
  10.         w_top = newwin(3,78,0,0);
  11.         w_main = newwin(20,78,4,0);
  12.         w_topmenu = newwin(1,78,3,0);
  13.         box(w_top,0,0);
  14.         touchwin(w_top);wrefresh(w_top);
  15.         box(w_main,0,0);
  16.         touchwin(w_main);wrefresh(w_main);
  17.         wgetch(w_main);
  18.         endwin();
  19.         for ( i = 0 ; i<=3 ;i++)
  20.                 (*f_main[i])();
  21.         return 0;
  22. }
main/menu.c
  1. #include <Win.h>
  2. int file()
  3. {
  4.         fprintf(stdout,"This is file \n");
  5.         return 0;
  6. }

  7. int edit()
  8. {
  9.         fprintf(stdout,"This is edit \n");
  10.         return 0;
  11. }

  12. int help()
  13. {
  14.         fprintf(stdout,"This is help \n");
  15.         return 0;
  16. }

  17. int exit_s()
  18. {
  19.         fprintf(stdout,"This is exit \n");
  20.         exit(0);
  21. }

incl/Win.h
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <curses.h>
  6. #include <sys/stat.h>
  7. #include <signal.h>
  8. #include <setjmp.h>
incl/menu.h
  1. char *m_main[]={"1.File","2.Edit","3.Help","4.Exit"};

  2. int file();
  3. int edit();
  4. int help();
  5. int exit_s();

  6. int (*f_main[])()={file,edit,help,exit_s};

执行 autoscan 生成 configure.scan 文件,并以此文件为模板编写 configure.in 文件
$ autoscan
$ cp configure.scan configure.in
修改 configure.in 文件,修改完成后的文件内容如下:
 
  1. # -*- Autoconf -*-
  2. # Process this file with autoconf to produce a configure script.

  3. AC_PREREQ([2.63])
  4. AC_INIT([main/main.c], [1.0], [webs109@unix-dr.com])
  5. AC_CONFIG_SRCDIR([incl/Win.h])
  6. AC_CONFIG_HEADERS([config.h])
  7. AM_INIT_AUTOMAKE(test,1.0)

  8. # Checks for programs.
  9. AC_PROG_CC

  10. # Checks for libraries.

  11. # Checks for header files.
  12. AC_CHECK_HEADERS([stdlib.h string.h curses.h setjmp.h sys/stat.h signal.h math.h])

  13. # Checks for typedefs, structures, and compiler characteristics.

  14. # Checks for library functions.

  15. AC_OUTPUT(Makefile)

执行 aclocal 、autoconf、autoheader 生成必要的配置信息文件。
$ aclocal
$ autoconf
$ autoheader

编写 Makefile.am 文件,该文件是生成 Makefile.in 的基础模板文件,内容如下:
  1. AUTOMAKE_OPTIONS=foreign
  2. INCLUDES=-I./incl
  3. LIBS=-lcurses
  4. bin_PROGRAMS=test
  5. test_SOURCES=main/main.c main/menu.c incl/Win.h incl/menu.h
执行 automake --add-missing 生成 Makefile.in 文件
$ automake --add-missing
$

最后进行测试验证
$ ./configure
$ gmake
$ ./test

我们看到依次打出了如下信息。
This is file
This is edit
This is help
This is exit
这说明,通过 main 函数中的 for 循环,依次调用了函数指针 f_main 指向的各个功能函数。



阅读(1799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~