【问题标题】:__func__ C++11 function's local predefined variable, won't compile__func__ C++11 函数的局部预定义变量,不会编译
【发布时间】:2013-02-14 02:29:42
【问题描述】:

函数的__func__ C++11 本地预定义变量无法在 Visual Studio 2012 Professional(安装了 Update 1)中使用默认的内置 Visual Studio 2012 (v110) 编译器或 2012 年 11 月 CTP ( v120_CTP_Nov2012) 编译器。但是,编辑并没有抱怨__func__ 下的任何红色波浪下划线。 __func__ 应该给出其包含函数的名称,在本例中为 foo,但这既不会编译也不会让编辑器抱怨:

#include <iostream>
using namespace std;

void foo()
{
    cout << __func__ << endl;
    return;
}

int main()
{
    foo();
    return 0;
}

它给出了编译器错误:

error C2065: '__func__' : undeclared identifier

我的代码中是否遗漏了某些内容,或者这会在未来的更新中起作用吗?

【问题讨论】:

  • Here 它说支持是“部分的”。不知道这是什么意思。
  • "但是,编辑并没有抱怨__func__ 下有任何红色波浪下划线。" -- 从不依靠红色曲线来告诉你你的代码是否可以编译。 IntelliSense 和实际的编译器前端是由不同的人开发的。如果有疑问,编译器是正确的,因为这就是创建二进制文件的原因。

标签: c++ visual-c++ c++11 visual-studio-2012 standards-compliance


【解决方案1】:

MSVC 对 C99 的支持总体上很差;您最好的选择可能是使用特定于 MSVC 的 __FUNCTION__ 宏。详情见这个问题:Cross-platform defining #define for macros __FUNCTION__ and __func__

更新 (2015-06-22):Visual Studio 2015 支持__func__,参见blog post

【讨论】:

    【解决方案2】:

    使用 C++11 标准编译程序,因为__func__ 是 C++11 的特性。

    所以,像这样编译它:

    g++ -std=c++11 foo.cpp -o foo
    

    【讨论】:

    • OP 没有使用 GCC。 MSVC 不支持任何-std=c++11 命令行选项。请在回答之前多花点时间阅读问题,这可能是对不同问题的一个很好的答案,只是不是这个问题。
    猜你喜欢
    • 2018-07-13
    • 2013-02-24
    • 2021-11-21
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多