int func(struct x{int a;}y);
int main()
{
}
上面的代码给出了在C++
错误以下错误:类型可能无法在参数类型被定义
而在C其运行细跟警告,意味着在C类型可被限定在参数列表
因此下面的代码应该给redefination错误在C类型定义
int func(int a,int a);
int main()
{
}
的疑问:为什么上面的代码在C++中
错误给错误:多参数命名为
int func(struct x{int a;}y);
int main()
{
}
上面的代码给出了在C++
错误以下错误:类型可能无法在参数类型被定义
而在C其运行细跟警告,意味着在C类型可被限定在参数列表
因此下面的代码应该给redefination错误在C类型定义
int func(int a,int a);
int main()
{
}
的疑问:为什么上面的代码在C++中
错误给错误:多参数命名为
由于参数名称在其参数列表中的范围内,因此参数具有相同的名称两次是错误的。我认为很明显,有两个参数具有相同的名称是没有用的?
// Explain why you want to have them say "int a, int a"
int func(int a, int b);
在C中,允许在参数类型列表中定义结构类型的内容。标签标识符具有原型范围或块范围(当函数是一个定义时)并且没有链接,这意味着它不同于在原型之外声明的结构或块,其标签标识符具有文件范围。你不能从它的内部递归调用这样的函数。
int func(struct x{int a;} y) {
func(y); // fine (the call, not the endless recursion)
}
注意,这仅适用于该func
中的定义相同翻译单位中发生的呼叫。如果另一个编译单元声明的功能和结构如下,这完全是罚款,该函数将可以调用(您需要确保上述声明不可见,否则会发生冲突,因为两个点的x
表示不同类型)。
struct x {int a;};
int func(struct x y);
在这两个翻译单元,即使x
是不同类型的(因为它们是不同的翻译单元),该类型是兼容,这是对参数类型唯一重要的东西。
您不仅可以定义在参数列表中的结构,而且在功能
struct x {int a;} func(void) {
return (struct x){ 0 };
}
这也只适用于C的返回类型部分没有这样的事情被允许在C++中。
我不确定你在做什么。但是,如果func
需要采取struct x
类型,然后的参数的函数 -
struct x
{
// ....
};
int func(struct x obj) ;
int func(int a, int b) ; // Notice that the second parameter is changed
// from a to b. Both the parameters cannot have
// the same name
好吧,你正试图定义一个结构作为函数参数的一部分。如果存在这种可能性,那么该定义将局限于该功能。在调用该函数时如何传递参数,因为结构x
在除func
之外的其他地方都不可见。
我不确定。但如果你问为什么这样的错误,而在此之前它是关于在第一种情况下C++中的语法这是典型的类型定义,这是不是在C不允许类型定义
...还是我理解这个问题
怀疑这不是至少两个不同的问题吗? – 2011-04-02 22:49:09