gpt4 book ai didi

C++ 将 'main' 声明为对函数的引用?

转载 作者:可可西里 更新时间:2023-11-01 17:00:44 25 4
gpt4 key购买 nike

如果我将 main 定义为对函数的引用会怎样?

#include<iostream>
#include<cstring>

using namespace std;

int main1()
{
cout << "Hello World from main1 function!" << endl;
return 0;
}

int (&main)() = main1;

会发生什么?我在在线编译器中测试时出现错误“Segmentation fault”:

here

并且在 VC++ 2013 下它会创建一个程序在运行时崩溃!

将调用函数指针数据作为代码的代码将被编译,这将在启动时立即崩溃。

我还想要一个关于此的 ISO C++ 标准引用。

如果您想根据像这样的宏定义 2 个入口点中的任何一个,这个概念将很有用:

int main1();

int main2();

#ifdef _0_ENTRY
int (&main)() = main1;
#else
int (&main)() = main2;
#endif

最佳答案

这不是一个符合规范的 C++ 程序。 C++ 要求(第 3.6.1 节)

A program shall contain a global function called main

您的程序包含一个名为 main 的全局非函数,它引入了与所需的 main 函数的名称冲突。


这样做的一个理由是它允许托管环境在程序启动期间对 main 进行函数调用。它不等同于源字符串 main(args) ,后者可能是函数调用、函数指针解引用、在函数对象上使用 operator() 或构造main 类型的一个实例。不,main 必须是一个函数。

另外需要注意的是,C++ 标准从不说明 main 的实际类型是什么,并且阻止您观察它。因此实现可以(并且确实!)重写签名,例如添加您省略的任何 int argc、char** argv、char** envp。显然它不知道要为您的 main1main2 执行此操作。

关于C++ 将 'main' 声明为对函数的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28484557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com