为什么某些类型(带有数组表示法)不能在没有 typedef 的情况下用作 C 中的返回类型?
Why can't some types (with array notation) be used as return type in C without typedef?
在处理类型语法时,我注意到这是合法的:
typedef int *((* T)[10]);
T fun(){
return 0;
};
int main(int argc, char * argv[]){
//int c = fun(); // (1)
return 0;
}
如果您取消对(1)
的注释,那么您将得到此类错误消息(GCC/Clang(:";CCD_ 2";(到目前为止正常(。然而,请注意";CCD_ 3";指出该类型是int *((*)[10])
的别名,而不仅仅是int ***
然而,如果不使用typedef:,就不可能声明具有这种类型的函数
int *((*)[10]) fun(){ // The compiler does not approve
return 0;
};
int *((* fun2)[10]) (){ // The compiler does not approve either
return 0;
};
int main(int argc, char * argv[]){
//int c = fun(); // (1)
return 0;
}
然后我想知道为什么?(问题是针对C语言,但看起来对C++来说是一样的(
此类型:
typedef int *((* T)[10]);
是指向大小为10的数组的指针,该数组的成员类型为int *
。这与int ***
不同。
至于创建一个返回此类型的函数,您需要以下内容:
int *(*fun())[10] {
return 0;
};
但使用typedef
可以使这一点更加清晰。
int *((*fun())[10]) {
return 0;
};
是的。为了可读性,您可能应该坚持使用typedef:(
原始
typedef int *((* T)[10])
可以脱落外层:
typedef int *(* T)[10]
或与dbush的功能对齐:
typedef int *(* T )[10]
int *(* fun() )[10]
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在C++中如何在没有pow的情况下进行基础计算
- 松弛原子与无同步情况下的记忆连贯性
- "使用"可以在所有情况下完全取代"typedef"吗?
- 在没有"typedef"的情况下,如何创建用于 c# 泛型的相关类型组?
- 易失性指针指向函数,在没有 typedef 的情况下使用时显示编译错误;需要帮助"void (* volatile userFunc)(void)"