风之舞原创,转载请注明来源
=================================
内容简单,没有写一个完整的菜单,仅仅是通过这个例子来解答通过函数指针来调用相应函数的方法。
系统目录
./
./main
./incl
程序文件:
main/main.c
- #include <Win.h>
-
#include <menu.h>
-
-
int main ( void )
-
{
-
int i;
-
WINDOW *w_main;
-
WINDOW *w_top;
-
WINDOW *w_topmenu;
-
initscr();
-
w_top = newwin(3,78,0,0);
-
w_main = newwin(20,78,4,0);
-
w_topmenu = newwin(1,78,3,0);
-
box(w_top,0,0);
-
touchwin(w_top);wrefresh(w_top);
-
box(w_main,0,0);
-
touchwin(w_main);wrefresh(w_main);
-
wgetch(w_main);
-
endwin();
-
for ( i = 0 ; i<=3 ;i++)
-
(*f_main[i])();
-
return 0;
-
}
main/menu.c
- #include <Win.h>
-
int file()
-
{
-
fprintf(stdout,"This is file \n");
-
return 0;
-
}
-
-
int edit()
-
{
-
fprintf(stdout,"This is edit \n");
-
return 0;
-
}
-
-
int help()
-
{
-
fprintf(stdout,"This is help \n");
-
return 0;
-
}
-
-
int exit_s()
-
{
-
fprintf(stdout,"This is exit \n");
-
exit(0);
-
}
incl/Win.h
- #include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <math.h>
-
#include <curses.h>
-
#include <sys/stat.h>
-
#include <signal.h>
-
#include <setjmp.h>
incl/menu.h
- char *m_main[]={"1.File","2.Edit","3.Help","4.Exit"};
-
-
int file();
-
int edit();
-
int help();
-
int exit_s();
-
-
int (*f_main[])()={file,edit,help,exit_s};
执行 autoscan 生成 configure.scan 文件,并以此文件为模板编写 configure.in 文件
$ autoscan
$ cp configure.scan configure.in
修改 configure.in 文件,修改完成后的文件内容如下:
- # -*- Autoconf -*-
-
# Process this file with autoconf to produce a configure script.
-
-
AC_PREREQ([2.63])
-
AC_INIT([main/main.c], [1.0], [webs109@unix-dr.com])
-
AC_CONFIG_SRCDIR([incl/Win.h])
-
AC_CONFIG_HEADERS([config.h])
-
AM_INIT_AUTOMAKE(test,1.0)
-
-
# Checks for programs.
-
AC_PROG_CC
-
-
# Checks for libraries.
-
-
# Checks for header files.
-
AC_CHECK_HEADERS([stdlib.h string.h curses.h setjmp.h sys/stat.h signal.h math.h])
-
-
# Checks for typedefs, structures, and compiler characteristics.
-
-
# Checks for library functions.
-
-
AC_OUTPUT(Makefile)
执行 aclocal 、autoconf、autoheader 生成必要的配置信息文件。
$ aclocal
$ autoconf
$ autoheader
编写 Makefile.am 文件,该文件是生成 Makefile.in 的基础模板文件,内容如下:
- AUTOMAKE_OPTIONS=foreign
-
INCLUDES=-I./incl
-
LIBS=-lcurses
-
bin_PROGRAMS=test
-
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 指向的各个功能函数。
阅读(1785) | 评论(0) | 转发(0) |