这个“主要”的定义有多合法

How legal is this definition of `main`?

本文关键字:定义 主要 这个      更新时间:2023-10-16

在托管系统中,标准要求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_tint 的别名(typedef)时,程序的格式良好。

显然,在不支持int32_t的系统中(固定宽度整数是可选的),使用未声明的int32_t是非法的。

此外,即使编译器支持 int32_t,也不需要在标头<cstdint>的全局命名空间中声明它(仅保证std::int32_t),因此程序依赖于实现的这一方面。

此外,在系统中,int32_t是另一种不同于int的类型,程序将形成不良。

因此,无论程序是否格式良好,它都是实现定义的。在某些系统上是这样;在其他人身上则不是。更简洁地说,该程序有条件地格式良好。