当一个函数在另一个函数的名称中(而不是在参数中)时,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;
}
为什么 “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;
}