这个“主要”的定义有多合法
How legal is this definition of `main`?
在托管系统中,标准要求main
定义"声明的返回类型int
"。这里的"声明"适用于"推导的返回类型",因此我们可以忽略该词来解决此问题。在 C 语言中,该标准明确有一个脚注,说明typedef
可用于int
但这在C++标准中缺失。我将假设意图与语言相同 "返回类型 int
"和"() 返回int
的函数",并且typedef
只是一个别名,而不是不同的类型。因此,该程序将被视为合法:
typedef int boobs;
boobs main() { }
如果我们这样做呢?
#include <cstdint>
int32_t main() {}
在许多系统上,这将编译为int32_t
只是int
但不是所有系统。我的困惑源于这样一个事实,即int32_t
是一个实现定义的值,这意味着编译失败取决于实现。
那么这种情况的合法性是什么呢?整个程序是否格式不正确,因为它有时可以编译或不编译?或者它的格式是否正确,因为它依赖于来自标准库的实现定义的值?
当且仅当int32_t
是 int
的别名(typedef)时,程序的格式良好。
显然,在不支持int32_t
的系统中(固定宽度整数是可选的),使用未声明的int32_t
是非法的。
此外,即使编译器支持 int32_t
,也不需要在标头<cstdint>
的全局命名空间中声明它(仅保证std::int32_t
),因此程序依赖于实现的这一方面。
此外,在系统中,int32_t
是另一种不同于int
的类型,程序将形成不良。
因此,无论程序是否格式良好,它都是实现定义的。在某些系统上是这样;在其他人身上则不是。更简洁地说,该程序有条件地格式良好。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 在制作中未定义对"主要"的引用
- (.text+0x20):对"主要"的未定义引用是什么意思
- Main.Obj中已经定义的主要
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- 一个奇怪的案例...对"主要"的未定义引用
- 在 sys/sysmacros.h <iterator>中定义的主要和次要宏由
- G++ 链接错误:"未定义对"主要"的引用
- 主要makefile中的未定义参考
- 这个“主要”的定义有多合法
- 带有错误代码的基本C++代码:"主要"的多重定义
- 对"主要"的未定义引用
- 当主要存在时,对"主要"的未定义引用
- 在C4droid上的主要重定义错误