当一个函数在另一个函数的名称中(而不是在参数中)时,C 中的含义是什么?

What is the meaning in C when a function is in another function's name (not in the arguments)?

为什么 “void (*parse(char *op))(int, int)” 这样写? (主要添加以给出用例),它从一个指针“有趣”调用,argv[2] 没有整数(第 18 行)......然后再次作为整数“有趣”(第 21 行)?

void    (*parse(char *op))(int, int)
{
    if (!strcmp(op, "+"))
        return(other stuff...); 
    else
        return (0);
}
int     main(int argc, char *argv[]){
    int a;
    int b;
    void    (*fun)(int, int);

    if (argc == 4){
        a = atoi(argv[1]);
        fun = parse(argv[2]);
        b = atoi(argv[3]);
        if (fun)
            fun(a, b);
        else
            return(0);
    }
    return(0);
}

它在技术上是如何工作的,它只是一种更简单的编写方式的炫耀,还是这是唯一正确的语法?

Why is void (*parse(char *op))(int, int) written like this?

因为这是 return 函数指针的语法。 return 类型是 void (*)(int, int),它是指向 returns void 并接受两个 int 参数的函数的指针。

通常,类型别名用于使指向函数的指针更具可读性:

typedef void operation(int, int);
using operation = void (int, int); // equivalent C++ alternative

operation* parse(char *op);

parse()是一个函数,returns是一个函数指针。不过,您可以将 typedef 与返回函数的类型一起使用,使它看起来更漂亮:

#include <string.h>
#include <stdlib.h>

// parser_func describes a function that takes two ints and returns nothing
typedef void (*parser_func)(int, int);

// Like this one.
void somefunc(int a, int b) {}

// And parse() is a function that takes a char* and returns a
// pointer to a function that matches parser_func.
parser_func parse(char *op) {
  if (!strcmp(op, "+"))
    return somefunc;
  else
    return NULL;
}

int main(int argc, char *argv[]) {
  int a;
  int b;
  parser_func fun; // Function pointer

  if (argc == 4) {
    a = atoi(argv[1]);
    fun = parse(argv[2]); // Assign a function to fun
    b = atoi(argv[3]);
    if (fun) {
      fun(a, b); // And call it if it's not null
    }
  }
  return 0;
}