读书人

函数指针浅谈 -表与函数指针完成命令行

发布时间: 2012-08-26 16:48:05 作者: rapoo

函数指针浅谈 -----表与函数指针完成命令行参数解析

函数指针浅谈?-----表与函数指针完成命令行参数解析? 个人认为C语言的精妙在于宏,指针。这使的C语言既可以与底层硬件打交道,又可以完成上层复杂的构架设计。而函数指针又是指针的一朵绚烂绽放的花。? 所谓函数指针,就是一个指向函数地址的指针变量,虽然这只是一个变量,但是在C语言中,这个变量可以做很多事情。
下面是一个函数指针的声明:
#include <stdio.h>typedef unsigned char bool_t;#define TRUE  1#define FALSE 0typedef struct{    char short_param[2];    char full_param[64];    void (* param_handler) (char *value);    bool_t need_value;} parameter_t;#include <stdlib.h>#define str_equal(x, y) (strncmp(x, y, strlen(y)) == 0 ? 1 : 0)#define array_max_len(x)    x##_max_cvoid show_version(char *value){    printf("This is a test version 1.0-*T*\n");}void show_help(char *value){    printf("==============================\n");    printf("-v  --version:   show version of this\n");    printf("-h  --help:      show help of this\n");    printf("-p  --print:     print the param value you input\n");    printf("==============================\n");}void print_value(char *value){    printf("The value you input is: %s\n", value);}#define parameter_t_max_c 3parameter_t param_array[parameter_t_max_c] = {                        {.short_param = "-v",                          .param_handler = show_version,                         .full_param = "--version",                         .need_value = FALSE,                        },                        {                        "-h", "--help", show_help, FALSE                        },                        {                        "-p", "--print", print_value, TRUE                        },};int main(int argc, char **argv){    int i, j;    for(j=1; j<argc; j++)    {        for(i=0; i<array_max_len(parameter_t); i++)        {            if(str_equal(param_array[i].short_param, argv[j]) ||               str_equal(param_array[i].full_param, argv[j]))            {                if(param_array[i].need_value)                 {                    param_array[i].param_handler(argv[++j]);                }                else                {                    param_array[i].param_handler("");                }            }        }    }    return 0;}

读书人网 >编程

热点推荐