提问人:ngn 提问时间:8/15/2023 最后编辑:Vlad from Moscowngn 更新时间:8/15/2023 访问量:125
不带 typedef 的 C 函数类型
C function type without a typedef
问:
假设我们有许多具有相同签名和返回类型的 C 函数:
R f(X x,Y y){...}
R g(X x,Y y){...}
R h(X x,Y y){...}
其中 和 是参数的类型,是结果的类型。X
Y
R
我们可以声明这些函数,例如在头文件中或作为正向声明,如下所示:
R f(X,Y);R g(X,Y);R h(X,Y);
或更简洁地说:
R f(X,Y),g(X,Y),h(X,Y);
或者,避免大多数重复:
typedef R F(X,Y);
F f,g,h;
这可以在一个语句中完成,而没有单独的语句吗?typedef
答:
-1赞
Wildptr
8/15/2023
#1
头.h
#pragma once
int f(int, int), g(int, int), h(int, int);
头.c
#include "head.h"
int f(int x, int y) { return 0; }
int g(int x, int y) { return 0; }
int h(int x, int y) { return 0; }
主.c
#include <iostream>
#include "head.h"
int main()
{
f(1, 2);
return 0;
}
评论
0赞
julaine
8/15/2023
从技术上讲,这是一个单行解决方案,但它比问题中的两行解决方案具有更多的重复性。
1赞
Darth-CodeX
8/15/2023
为什么在文件中,也许你的意思是?iostream
*.c
stdio.h
2赞
John Bollinger
8/15/2023
OP 在问题中已经有了这一点(标题中的声明)。显然,他们正在寻找不同的东西。
1赞
Vlad from Moscow
8/15/2023
#2
我还没有检查过,但也许在 C23 中可以写
typeof( R( X, Y ) ) f, g, h;
评论
1赞
0___________
8/15/2023
|如果你没有检查,你为什么要检查?
0赞
Vlad from Moscow
8/15/2023
@0___________我目前无法检查它,但是如果您或其他人可以检查您,或者他可以在评论中例如写下它是无效的。在这种情况下,我将删除我的答案:)
0赞
Lundin
8/15/2023
虽然这实际上只是另一个名字的 typedef。typeof 和 typedef 之间的主要区别在于 typeof 不向后兼容。
0赞
Darth-CodeX
8/15/2023
en.wikipedia.org/wiki/C23_(C_standard_revision)#Keywords
1赞
Vlad from Moscow
8/17/2023
@ngn 正如答案中所指出的,它现在是 C23 标准功能。
下一个:C 函数指针,另一种语法
评论
R f(X,Y),g(X,Y),h(X,Y);