这两种 C 语言声明有什么区别?

3
typedef int F1(int x);

int F1(int x);

对我来说看起来一样,无论是否使用typedef..


在这种情况下,即使您不提供返回类型,默认的返回类型也是int。但是,当使用不同的数据类型时,情况将会有所不同。http://www.geekinterview.com/question_details/31059 - user379888
2个回答

6
typedef int F1(int x);

您定义了一个函数类型F1,它接受一个整数作为参数并返回一个整数。
int F1(int x);

你需要定义一个名为F1的函数。

2
区别在于写作时更加清晰明了:“typedef int (*F1)(int x);” - eyalm
1
@eylam - 这两者并不等价。你的声明了一个函数指针类型,而原始声明了一个函数类型。 - Chris Lutz
@Manoj:我知道但它们通常用于函数指针。这就是为什么我加了括号的原因。 - Phong
@onemasse - typedef int functype(int);typedef int (*funcptr)(int); 是不同的。functype f; 声明了一个函数 f,而 funcptr fp = f; 声明了一个指向 f 的函数指针 fp。将它们展开并查看差异。 - Chris Lutz
@Manoj:有点混淆,所以我删除了(pointer)部分。感谢你的介入。 - Phong

6

typedef并不是声明变量,而是声明类型。

当你使用typedef时:

typedef int F1(int x);

在你的代码后面,你可以这样写:

F1 myfunction;

这相当于:

int myfunction(int x);

如果不使用typedef,那么我不能使用F1 myfunction吗? - wp2
@wp2 -- 没错。请参考http://msdn.microsoft.com/zh-cn/library/05w82thz(VS.71).aspx。 - BeemerGuy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接