【发布时间】:2014-02-26 19:20:20
【问题描述】:
以下 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() 识别为变量(正如预期的那样); 此外,证明它在 VS2013 下有效:D。
【问题讨论】:
-
标识符不能包含标点符号。
-
int f()被解释为不带参数并返回int的函数声明。你不能给它赋值。而且由于它没有定义(仅声明),MSVC 链接器无法解析它。我不知道为什么它首先会编译。 -
初学者应该使用
int main()。 -
同样重要的是:哪个版本的 VS 可以让你这样做?
-
@juanchopanza 我听说过这个,我只是把它放在一个空项目中以确保它有效。
标签: c++ variables visual-c++ syntax naming