【发布时间】:2012-03-17 01:49:29
【问题描述】:
我正在研究 MS C++ 编译器,并且已经完成了下一个程序:
#include <stdio.h>
void main(void)
{
void(*ptr)(void) = &main;
}
我想在 main() 方法/函数上创建一个指针,但出现了下一个错误:
error C2440: 'initializing' : cannot convert from 'int (__cdecl *)(void)' to 'void (__cdecl *)(void)'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
我想知道:
- 如何获取函数/方法 main() 的指针
- 为什么默认输出是关于 int __decl... 的信息,但我在 main() 上准确地写了 void,而不是 int?
【问题讨论】:
-
在 C++ 中,
main必须返回int。而且由于 C++ 程序不能调用main(这是被禁止的),我看不出指向它的指针有多大用处(如果允许的话) -
@R.MartinhoFernandes:有点错误,它必须有返回类型
int,它实际上不必返回什么。 -
@smerlin:它总是返回一些东西。如果控制在没有遇到
return语句的情况下结束,则标准规定它将返回0。 -
@user1131997:正确,但
void main()is a Microsoft specific extension to the language according to the MSDN docs。它可能不适用于其他 C++ 编译器。 用标准 C++ 编写并避免编译器特定的扩展,除非它们是绝对必要的。 -
@user1131997:这并不能改变你根本不应该这样做的事实。在 C++ 中调用 main 是非法的。即使它恰好起作用,你不应该这样做!
标签: c++ visual-c++ pointers function-pointers