函数指针浅谈 -----表与函数指针完成命令行参数解析
#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;}