Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c++;? #包括 #包括 int main(){ CUT< P> C++标准称,您可能不从自己的代码调用主(),至于获得当前函数的名称,可以使用函数> 宏,但这又不是标准的: #include <iostream> #include <cstdlib> int main() { cout << "!!!Hello World!!!" << endl; system("pause"); return main(); } #包括 使用名称空间std; void foo(){ cout_C++ - Fatal编程技术网

在c++;? #包括 #包括 int main(){ CUT< P> C++标准称,您可能不从自己的代码调用主(),至于获得当前函数的名称,可以使用函数> 宏,但这又不是标准的: #include <iostream> #include <cstdlib> int main() { cout << "!!!Hello World!!!" << endl; system("pause"); return main(); } #包括 使用名称空间std; void foo(){ cout

在c++;? #包括 #包括 int main(){ CUT< P> C++标准称,您可能不从自己的代码调用主(),至于获得当前函数的名称,可以使用函数> 宏,但这又不是标准的: #include <iostream> #include <cstdlib> int main() { cout << "!!!Hello World!!!" << endl; system("pause"); return main(); } #包括 使用名称空间std; void foo(){ cout,c++,C++,一般来说,没有。现在,你只要知道编译器需要知道你在编译时调用的确切函数就足够了。比方说,你不能像变魔术一样 #include <iostream> using namespace std; void foo() { cout << __FUNCTION__ << endl; } int main() { foo(); } 如果被调用的函数名在运行时发生更改(有一些例外情况和解决方法,但您不需要) 不要把它看作是硬编码的例子:它不是。如果你需要

一般来说,没有。现在,你只要知道编译器需要知道你在编译时调用的确切函数就足够了。比方说,你不能像变魔术一样

#include <iostream>
using namespace std;

void foo() {
   cout << __FUNCTION__ << endl;
}

int main() {
   foo();
}
如果被调用的函数名在运行时发生更改(有一些例外情况和解决方法,但您不需要)

不要把它看作是硬编码的例子:它不是。如果你需要调用函数,那么你只需要写它的名字,而不是试图抽象它,或者其他什么

另外,现在是学习while循环、无限循环和完全不使用函数调用的write的好方法,例如

func = "my_function"; 
func(); 
intmain()
{
而(1){
不能在“C++”中允许吗?不允许

实际上,您可以调用
main()
?是的

<> P>无论C++标准如何说,这并不能阻止Linux G++编译器在主()/<代码> < < /P>中编译代码<代码>主代码()>代码>。 查看程序集,我们看到调用main与调用任何其他函数一样:

 > g++ g.cpp; ./a.out
 y = 3
 y = 6
 y = 7
并不是说这种行为是有保证的,但看起来g++似乎并不真正关心标准,除了使用
-pedantic

main:
        ...
        cmpl    $7, -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret
如果特定的实现允许这样做,则它的行为不正确(a)。
C++14,3.6.1 Main function/3
中的标准状态非常明确:

程序中不得使用功能
main


(a) 请记住,许多实现松散地遵循标准的某些部分,更喜欢强大而不是严格。这可能会产生不幸的副作用,即您的代码可能无法移植到其他编译器,甚至同一编译器的其他版本

许多实现还允许您采取更严格的观点,例如使用
g++-std=c++11-Werror=pedantic
,它抓住了这个问题中的特定问题,以及许多其他问题。这就是“模式”根据
1.4实施合规性
,允许实施声称符合标准的翻译:

如果程序违反了任何可诊断规则…,则一致性实现应发出至少一条诊断消息


您将看到,在这种情况下仍有可能允许代码编译和运行,因为“诊断消息”可能意味着警告而不是错误。

如果您想获取指向当前函数的函数指针或其他内容,我认为这是不可能的。@Michael,假设main()是一个可以调用的函数,编译器可以将上述尾部递归优化为一个循环,这将“起作用”@尼尔:你能说出一个优化尾部调用的C或C++编译器吗?@ TTMRMICHER在这个特定的情况下,因为调用是非法的,但是在一般情况下GCC会这样做。看到尼尔@,尼尔函数的副本可能是字符串…它不能被调用。@米迦勒,我知道。我不清楚(不是第一次)。@Mask实际上在问什么。以上是关于函数元数据的最新情况。好吧,如果你要假设非标准的
\uuuu函数\uuuu
,那么你也可以假设非标准的
dlopen
dlsym
(或等效)并以这种方式获得函数指针。。。
 > g++ g.cpp; ./a.out
 y = 3
 y = 6
 y = 7
main:
        ...
        cmpl    $7, -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret
g.cpp:8: error: ISO C++ forbids taking address of function '::main'