C语言

来源:互联网 发布:linux socket udp监听 编辑:程序博客网 时间:2024/06/05 15:36

-------real_func.h


#ifndef LOCAL_TEST_REAL_FUNC_H
#define LOCAL_TEST_REAL_FUNC_H


#define tag_start_variable_1   10
#define tag_end_variable_1     12


#define tag_start_variable_2   20
#define tag_end_variable_2     22


//modify here
#define DO_TEST(a,b)       some_func(a,b, 1,2)










int some_func(int a, int b, int c, int d)
{
    return a+b+c+d;
}














#endif //LOCAL_TEST_REAL_FUNC_H



------main.c


#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "real_func.h"


#define PARA_WORD_MAX_LEN (30)
#define PARA_MAX_NUM (30)


char* key_head;
char* val_head;
int para_size = 0;


char g_cur_val[PARA_WORD_MAX_LEN];




void mcpy(char* d, char* s, int l)
{
    int i=0;
    for(;i<l;++i)
    {
        *(d++) = *(s++);
    }
    *d = '\0';
}




int println(const char *fmt, ...)
{
    char printf_buf[1024];
    va_list args;
    int printed;
    va_start(args, fmt);
    printed = vsprintf(printf_buf, fmt, args);
    va_end(args);
    puts(printf_buf);
    return printed;
}


void mcpy0(char* d, char* s)
{
    while(*s != '\0')
    {
        *(d++) = *(s++);
    }
    *d = '\0';
}


void init_para(int argc, char* argv[]) {
    int i=0;
    char* str;
    char c;
    int j;
    key_head = (char*)malloc(PARA_WORD_MAX_LEN * PARA_MAX_NUM);
    val_head = (char*)malloc(PARA_WORD_MAX_LEN * PARA_MAX_NUM);
    char* key = key_head;
    char* val = val_head;
    int index;


    for(i=1;i<argc;++i)
    {
        str = argv[i];
        j = 0;
        while(str[j] != '\0')
        {
            c = str[j];
            if(c == '=')
            {
                index = j;
            }


            j++;
        }


        mcpy(key, str, index);
        mcpy(val, str+index+1, j);


        para_size++;
        key += PARA_WORD_MAX_LEN;
        val += PARA_WORD_MAX_LEN;


    }
}


void dispose()
{
    free(key_head);
    free(val_head);
}


int get0(char* key, char* val )
{
    int ret = 0;
    int i=0;
    char* key0;
    for(i=0; i<PARA_MAX_NUM; ++i)
    {
        key0 = key_head + i * PARA_WORD_MAX_LEN;
        if(strcmp(key, key0) == 0)
        {
            mcpy0(val, val_head + i * PARA_WORD_MAX_LEN);
            break;
        }
    }
    if(i == PARA_MAX_NUM)
    {
        mcpy0(val, key);
        ret = 1;
    }
    return ret;
}


char* get(char* key)
{
    get0(key, g_cur_val);
    return g_cur_val;
}


int getint(int keyint)
{
    char key[13];
    snprintf(key, sizeof(key), "%d", keyint);
    return atoi(get((key)));
}




void do_scan()
{
    char *key = key_head + para_size * PARA_WORD_MAX_LEN;
    char *val = val_head + para_size * PARA_WORD_MAX_LEN;
    int i=0;
    char temp[PARA_WORD_MAX_LEN];


    while(1)
    {
        ++i;
        printf("key%d (q for quit):", i);
        gets(temp);
        mcpy0(key, temp);
        if(strcmp(key, "q")==0 || strcmp(key, "quit")==0||
                strcmp(key, "Q")==0 || strcmp(key, "QUIT")==0 )
        {
            break;
        }
        printf("value%d:", i);
        gets(temp);
        mcpy0(val, temp);


        para_size++;
        key += PARA_WORD_MAX_LEN;
        val += PARA_WORD_MAX_LEN;
    }


}


typedef struct tagCommmmmmm
{
    int (*println)(const char *fmt, ...);
    char* (*get)(char* key);
    int (*getint)(char* key);


} CommonFunc;


CommonFunc funcs = {
        println,
        get,
        getint
};






int go();
int main(int argc, char* argv[]){


    init_para(argc, argv);
    do_scan();


    go();


//    funcs.println("%d", funcs.getint(234));
//    funcs.println("ggg%d", 1);
//    funcs.println("ggg%d", 2);


//    printf("%s\n", get("qin"));
//    printf("%s\n", get("han"));


    dispose();
}












int go()
{
    int i=0;
    int j=0;
    int ret;
    for(i=tag_start_variable_1;i<tag_end_variable_1;i++)
    {
        for(j=tag_start_variable_2;j<tag_end_variable_2;j++)
        {
            ret = DO_TEST(funcs.getint(i), funcs.getint(j));
            funcs.println("%d", ret);
        }


    }
}
原创粉丝点击