2013-07-30 3 views
1

Итак, сегодняшнее упражнение требует, чтобы я использовал это header.h, чтобы дать мне функцию, соответствующую оператору.C является синтаксисом словаря?

#ifndef __HEADER__ 
#define __HEADER__ 

operator operator_table[] = {{"-", &function_sub}, \ 
{"+", &function_add}, \ 
{"*", &function_mul}, \ 
{"/", &function_div}, \ 
{"%", &function_mod}}; 

#endif 

Первое, что я заметил, что operator тип не определен так, может быть, я должен typedef его к int? Тогда реальная проблема начинается, я прочитал и K & R и C Primer Plus с начала и не столкнулся с этим синтаксисом, или, по крайней мере, не признаю его, это какой-то dictionary? Как я могу использовать его?

+7

Казалось бы массив структур, структура (названный 'operator'), содержащий строку и указатель на функцию. Специального синтаксиса нет, просто определение нормалей и инициализация. –

+0

Что означает «/»? как разделитель? и как мне получить доступ к функциям? – ItsASecret

+1

'\\' является частью препроцессора и является оператором продолжения строки. Это просто означает, что препроцессор будет создавать одну строку из этого для компилятора. –

ответ

3

Кажется, это массив структур, структура (с именем operator), содержащая строку и указатель на функцию. Специального синтаксиса нет, просто определение нормалей и инициализация.

\ является частью препроцессора и является оператором продолжения строки. Это просто означает, что препроцессор будет создавать одну строку из этого для компилятора.

+0

Хорошо, но как мне получить функцию, если у меня есть только оператор, я хочу, например, «+», и ни имя поля знака структуры, ни имя поля указателя функции в структуре? Должен ли я просто определить структуру? – ItsASecret

+0

Я просто определю это, и спасибо за «/» препроцессор, я понятия не имел! – ItsASecret

+0

@ItsASecret Возможно, это часть упражнения для создания этой структуры и функций, если они не находятся в другом заголовочном файле? –

3

operator вот структура. и она может быть определена таким образом:

typedef struct { 
    char *op; 
    int (*func)(int, int); 
} operator; 

func здесь является указателем на функцию

function_sub, function_add, function_mul, function_div и function_mod должны быть функции, определенные в вашем коде на Си

+0

Я думаю, что я это сделаю, определю структуру и просто использую ее именно так! – ItsASecret

3

В C operator не является ключевым словом (это не так, например, в C++), и здесь используется как символ, представляющий тип. Так что либо он typedef'd где-то, либо он нуждается в определении.

Глядя на массив, это массив структур, структура, соответствующая operator, сделанная из char * и указателя функции. «+» связан с function_add(type, type) и т. д. type здесь не указан, так как это не может быть выведено из этого фрагмента кода. То же самое относится к числу аргументов, я предположил 2, но это произвольно.

Таким образом, чтобы использовать header.h, вы должны либо:

  • включить в .c файл заголовочный файл, который определяет operator, если он существует.

  • или определить его по-своему, не забывая определять функции, отвечающие за фактическую обработку.

Например:

#ifndef __OPERATOR_HEADER__ 
#define __OPERATOR_HEADER__ 

float function_add(float, float); 
float function_sub(float, float); 
/* etc, the body of these function being defined in your .c file */ 

typedef struct operator { 
    char *operator_name; 
    float (*operator_function)(float, float); 
}; 

#endif 
Смежные вопросы