【问题标题】:C is this syntax a dictionary?C 这个语法是字典吗?
【发布时间】:2013-07-30 12:25:09
【问题描述】:

所以今天的练习要我用这个header.h显然是为了给我操作符对应的功能。

#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?我该如何使用它?

【问题讨论】:

  • 它似乎是一个结构数组,该结构(名为operator)包含一个字符串和一个函数指针。没有特殊的语法,只是普通的数组定义和初始化。
  • “/”是什么意思?像分隔符?以及如何访问这些功能?
  • `\` 是预处理器的一部分,是一个续行“操作符”。它只是意味着预处理器将为编译器创建一行。
  • 您的评论获得了 6 次以上的投票,您能回答一下,以便我接受吗?谢谢!

标签: c arrays syntax dictionary header


【解决方案1】:

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

\ 是预处理器的一部分,是一个续行“操作符”。它只是意味着预处理器会从中创建一行供编译器查看。

【讨论】:

  • 好的,但是如果我只有我想要的运算符“+”,并且既没有结构的符号字段的名称,也没有函数指针字段的名称,我该如何获取函数结构?我应该只定义结构吗?
  • 我只是定义它,感谢'/'预处理器的东西,我不知道!
  • @ItsASecret 这可能是创建该结构和函数的练习的一部分,除非它们在另一个头文件中?
  • 是的,我也这么认为,他们只是提供标题并要求我们使用该标题制作一个工作程序,所以是的,他们只是希望我们创建结构和函数,谢谢!
【解决方案2】:

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

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

func这里是指向函数的指针

function_subfunction_addfunction_mulfunction_divfunction_mod 应该是你的 c 代码中定义的函数

【讨论】:

  • 我想我会这样做,定义结构并像那样使用它,谢谢!
【解决方案3】:

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

看数组,这是一个结构体数组,对应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

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多