我试着编译这个:
typedef struct Type {
int value;
} Type;
Type foobar(Type value) { return (Type)value; }在MSVC2017中,这会引发以下错误:
C2440: 'type cast': cannot convert from 'Type' to 'Type'
如果文件名以.cpp结尾,而不是以.c结尾,则这种情况似乎不会发生。这种情况似乎也不会发生在gcc身上。这一切为什么要发生?
发布于 2022-12-01 18:16:30
(Type)value违反了C 2018 6.5.4 2中的约束,后者涵盖cast操作符:
除非类型名称指定了空类型,否则类型名称应指定原子、限定或非限定标量类型…。
标量类型是算术或指针类型,根据C 2018 6.2.5 21:
算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型。
C++有不同的规则,GCC在默认模式下,在这方面不符合C标准。
这里不需要强制转换;在return语句中,value引用函数的value参数,该参数具有Type类型。所以return value;就足够了。
https://stackoverflow.com/questions/74646313
复制相似问题