草庐IT

bond_main

全部标签

c++ - 静态类成员是否保证在调用 `main` 之前被初始化?

是否保证静态类成员在调用main之前被初始化? 最佳答案 我认为没有:[C++03:3.6.2/3]:Itisimplementation-definedwhetherornotthedynamicinitialization(8.5,9.4,12.1,12.6.1)ofanobjectofnamespacescopeisdonebeforethefirststatementofmain.Iftheinitializationisdeferredtosomepointintimeafterthefirststatementofmai

c++ - void main的由来是什么?

我经常在论坛周围看到臭名昭著的voidmain()并且几乎立即在问题后发表评论告诉用户永远不要使用voidmain()(我完全同意)。但是voidmain()的来源在哪里呢?为什么我仍然看到新人养成了让main不返回任何内容的坏习惯,而正确的方法是返回int。我明白为什么这种方法是错误的,如this中所述。问题和许多其他人,但我不知道这种声明main的方法是如何产生的,甚至不知道为什么它仍然教给一些学生。 最佳答案 甚至BjarneStroustrup也用C++编写了voidmain,因此它确实是一种常见的反模因,并且是一种旧的反模

c++ - 为什么 C 和 C++ 中的 main 函数的类型留给用户定义?

这个问题在这里已经有了答案:Whatshouldmain()returninCandC++?(19个回答)关闭8年前。为什么main()是用户定义的函数?什么时候使用voidmain()和intmain()? 最佳答案 编辑这个答案并不完整,因为它并没有真正解决奇怪的句子“或以某种实现定义的方式”。我现在写了一个morecompleteanswer它还涉及C90、C11和C++。编辑结束以下是C标准(ISOC9899:1999):5.1.2.1FreestandingenvironmentInafreestandingenviron

c++ - 为什么在 C++ 中不允许调用 main()

C++033.6.1.3:函数main不得在程序中使用(3.2)。...我想知道为什么存在这条规则......有没有人知道如果使用main会出现问题的任何系统/实现?附:1.我知道used这个词的定义。2.我知道有一些简单的解决方法,例如从main()调用单个MyMain()并改用MyMain()。3.问题是关于现实世界的实现,如果没有限制,会有问题。谢谢! 最佳答案 除了其他答案:c++规范保证所有静态初始化都在main被调用之前发生。如果代码可以调用main,那么某些静态作用域对象可以调用main,在这种情况下,基本保证就被违反

c++ - 将 main 声明为 extern "C"是否合法 C++?

作为一名低级程序员,我经常使用可执行文件的模块启动代码,因此我非常了解“crt0”之类的代码是如何工作的。在编写C++代码时,我通常将main声明为extern"C"以匹配C启动代码将要调用main。因此,我通常将此声明用于main(如果专门针对Windows,则使用wmain):extern"C"intmain(intargv,constchar*const*argv)extern"C"int__cdeclwmain(intargv,constwchar_t*const*argv)在main上使用extern"C"是否合法?另外,对于argv的类型,constchar*const*是

c++ - void main() 有什么问题?

为什么一直不鼓励在C++中将入口点的返回类型设置为void,后来又被标准删除,被现代编译器禁止?为什么它被认为是不好的做法?现在,据我了解,C#和Java都允许入口点的返回类型为void即staticvoidmain(String[]args)/*Java*/staticvoidMain(string[]args)/*C#*/C#和Java程序员并不认为这是不好的做法,事实上他们经常使用它。其他语言(仅打算成为,我怀疑C++至少在这十年内会成功)C++的可能继任者,如D编程语言或Vala也允许无效的主要()。如您所见,我怀疑C++社区将其从标准中删除,因为它太晦涩或不受欢迎。所以我的问

c++ - C++中WinMain、main和DllMain的区别

这三个功能有什么区别,什么时候使用?? 最佳答案 ma​​in()表示你的程序是consoleapplication.WinMain()表示程序是GUIapplication--即显示窗口和对话框,而不是显示控制台。DllMain()表示程序是DLL.DLL不能直接运行,但供上述两种应用程序使用。因此:在编写要显示窗口等的程序时使用WinMain。在编写DLL时使用DLLMain。在所有其他情况下使用main。 关于c++-C++中WinMain、main和DllMain的区别,我们在S

c++ - 使用 glut 和 std::string 时 main() 之前的段错误?

在64位Ubuntu14.04LTS上,我正在尝试编译一个使用glut的简单OpenGL程序。在main中执行任何代码行之前,我遇到了段错误(SIGSEV);即使在一个非常精简的测试程序上。这是什么原因造成的?我的命令行:g++-Wall-gmain.cpp-lglut-lGL-lGLU-omain我的简单测试用例:#include#include#include#include#includeintmain(intargc,char**argv){printf("Started\n");std::stringdummy="hello";glutInit(&argc,argv);ret

c++ - 在 main() 之前可能需要做什么样的操作

我遇到了thisquestion询问如何在C中的main()之前执行代码,提到C++有策略。我大部分时间都生活在应用程序空间中,因此我从未想过在main()之前执行。什么样的事情需要这种技术? 最佳答案 “什么样的事情需要这种技术?”事实:无。但是,由于各种原因,您可能希望在main之前做很多有用的事情。举一个实际的例子,假设你有一个构建doohickies的抽象工厂。您可以确保构建工厂实例,将其分配到某个特殊区域,然后将各种具体的doohickies注册到它...是的,您可以这样做。另一方面,如果您将工厂实现为单例,并使用全局值初

C++:如何在 main.cpp 中返回负值

作为学校的作业,我们要编写一个C++程序,并在main中返回不同的错误代码。问题是如果发生特定错误,我们必须返回-2但我不知道如何返回负值。例如:intmain(){inta=-2;returna;}在Windows中,这给了我一个返回值,例如:42232684,而在Linux中有:253为什么-2是不允许的?我怎样才能获得-2? 最佳答案 问题是返回给操作系统的内容随后会由操作系统外壳按照IT的喜好进行解释,而不是按照您的程序的喜好进行解释。main函数返回一个int,而return-2正是你的程序要做的。253是2秒补码到8位的