C от символа к имени функции - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу прочитать файл с множеством имен библиотечных функций, которые включены в math.h, например:

sqrt
sin
cos
acos
asin

Используя файлы, я собираюсь получить символы, но я хочу поместить их в структуру, которая является указателем на эту функцию. Структура выглядит так:

typedef struct {
    char l[N];
    double value;
    int MOD;
    double (*function)(double);
} st ;

Указатель на функцию double (* function) (double) Как я могу преобразовать символ, который я собираюсь прочитать из файла, в указатель на функцию?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Создать массив структур

struct Match {
    char name[20]; // enough
    double (*fx)(double);
};

struct Match m[] = { /* sorted for bsearch */
    {"acos", acos},
    {"asin", asin},
    {"cos", cos},
    {"sin", sin},
    // ...
    {"sqrt", sqrt},
};

// etc

struct Match *mm = bsearch("asin", m, sizeof m / sizeof *m, cmpnames));
if (mm) newvalue = mm->fx(oldvalue);
0 голосов
/ 15 ноября 2018

Не забудьте включить математический заголовок (math.h)

После того, как вы прочитали имя функции из файла в массиве символов, используйте функцию strcmp(const char *str1, const char *str2), которая возвращает 0, если str1 == str2 // character by character. Тогда вы можете написать код так:

`double val;

if (strcmp (st-> l, "sqrt") == 0)

{

stTemp-> function = sqrt;

val = stTemp-> function (value); // вычисляем sqrt (значение)

} else if (strcmp (st-> l, "sin"))

{* * тысяча двадцать-один

stTemp-> function = sin;

val = stTemp-> function (value); // вычисляем грех (значение)

} // etc`

Предполагая, что stTemp является указателем на st struct

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...