1

So today's exercise wants me to use this header.h obviously to give me the function corresponding to the operator.

#ifndef __HEADER__
#define __HEADER__

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

#endif

First thing I noticed is that operator type isn't defined so maybe I should typedef it to an int ? Then the real problem start, I've read both K&R and C Primer Plus from beginning and haven't encountered this syntax, or at least I don't recognize it, is it some kind of dictionary ? How can I use it ?

4

3 回答 3

3

在 C 中,operator不是关键字(例如,在 C++ 中不是这种情况),在这里用作表示类型的符号。因此,它要么在某处被 typedef'd,要么需要定义。

查看数组,这是一个结构数组,对应于operator由 achar *和函数指针组成的结构。“+”与 相关联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
于 2013-07-30T12:57:13.760 回答
3

它似乎是一个结构数组,该结构(名为operator)包含一个字符串和一个函数指针。没有特殊的语法,只是一个普通的数组定义和初始化。

\是预处理器的一部分,并且是行继续“操作符” 。它只是意味着预处理器将为此创建一行供编译器查看。

于 2013-07-30T12:33:49.437 回答
3

operator这是一个结构。它可以这样定义:

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

func这是一个指向函数的指针

function_sub, function_add, function_mul, function_divandfunction_mod应该是在你的 c 代码中定义的函数

于 2013-07-30T12:32:42.497 回答