C ++变量命名

时间:2014-02-26 19:20:21

标签: c++ variables visual-c++ syntax naming

以下C ++代码在Visual Studio中编译:

void main() {
    int f() = 5;
std::cout << typeid(f()).name();    // int
}

并且,只要我能看到,它在Linux中不能与gcc或g ++一起使用(我尝试在运行Ubuntu的虚拟机和运行Mint的物理虚拟机上编译它,两者都包含日期更新)

但是,变量f()不能在任何地方使用。以下代码:

void main() {
    int f() = 5;
    cout << f();
}

给出了这个错误:

error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main
error LNK1120: 1 unresolved externals

我想知道的是它的工作原理,f()是什么,如果这是一个有效的命名,它是如何使用的。

修改

它适用于Visual Studio 2013和Visual C ++ 2010。

PS:我没有尝试定义函数或声明变量或任何东西。我听说过这种行为,我找不到解释原因。

似乎调试器不将f()识别为变量(正如预期的那样); 此外,证明它的工作原理:D在VS2013下。 enter image description here

3 个答案:

答案 0 :(得分:3)

 int f() = 5;

你偶然发现了“最令人烦恼的解析”。 编译器从中得到的(也是根据你得到的链接器错误)是一个函数声明/指针。可以解析为函数声明的所有内容都将是。 此代码声明了一个名为f的函数,该函数不带参数并返回int。我的猜测是Visual Studio假定此函数现在位于内存地址5。

你可能想要的是使用f作为变量,所以省略括号:

int f = 5;

答案 1 :(得分:0)

int f() = 5;是无效的语法。

我认为你想要这样的东西。

int f() { return 5; }

int main()
{
    std::cout << f();
}

答案 2 :(得分:0)

那是因为

     int f() = 5; 

不是变量。要在C ++中声明整数变量,不能包含括号。因此,正确的代码将是

    int f = 5;

所以总的完整代码是

    void main() 
    {
       int f = 5;
       cout << f;
    }

一般而言         void main() 不再使用,它​​是

    int main()
    { 
       int f = 5;
       cout << f;
       return 0;
    } 

代替。这取决于你的编译器的年龄,但这通常是现在可以接受的做法。