使用 VSCode & VS 获取 C++ 函数地址
Getting C++ Function Address using VSCode & VS
我已经在 VSCode 中尝试了这段代码,理论上输出应该给我函数的地址
#include<iostream>
using namespace std;
int getNumber(){
return 9000;
}
int main(){
cout<<getNumber<<endl;
return 0;
}
一旦我运行 VSCode中的代码,输出是:1
所以我让我的朋友在Visual Studio上运行完全相同的代码(因为我没有VS),输出是一个内存地址。
我的问题是,
- 为什么在 VSCode 和 VS 中 运行 时,该代码的输出不同?
- 我应该怎么做才能使用完全相同的代码在 VSCode 中获取该函数的地址?
std::ostream::operator<<
有一个重载 bool
并且指针可以隐式转换为 bool
,所以 VSCode 的输出(你告诉我们你在哪里用 mingw 编译)是正确的。由于函数 getNumber
的地址必然是非零的,因此当转换为 bool
时,它变为 true
,等于 1
,因此这就是打印的内容。
另一方面,MSVC(Visual Studio 用来编译您的代码)似乎出错了。
要确保输出函数的地址,您可以这样做:
cout << (void *) getNumber << endl;
同样,void *
的特定重载确保 getNumber
随后被解释为地址。
附录: 如果设置了足够高的警告级别,gcc 将对此发出警告,请参阅:https://wandbox.org/permlink/J9kxSzLshRQsdt0e
我已经在 VSCode 中尝试了这段代码,理论上输出应该给我函数的地址
#include<iostream>
using namespace std;
int getNumber(){
return 9000;
}
int main(){
cout<<getNumber<<endl;
return 0;
}
一旦我运行 VSCode中的代码,输出是:1
所以我让我的朋友在Visual Studio上运行完全相同的代码(因为我没有VS),输出是一个内存地址。
我的问题是,
- 为什么在 VSCode 和 VS 中 运行 时,该代码的输出不同?
- 我应该怎么做才能使用完全相同的代码在 VSCode 中获取该函数的地址?
std::ostream::operator<<
有一个重载 bool
并且指针可以隐式转换为 bool
,所以 VSCode 的输出(你告诉我们你在哪里用 mingw 编译)是正确的。由于函数 getNumber
的地址必然是非零的,因此当转换为 bool
时,它变为 true
,等于 1
,因此这就是打印的内容。
另一方面,MSVC(Visual Studio 用来编译您的代码)似乎出错了。
要确保输出函数的地址,您可以这样做:
cout << (void *) getNumber << endl;
同样,void *
的特定重载确保 getNumber
随后被解释为地址。
附录: 如果设置了足够高的警告级别,gcc 将对此发出警告,请参阅:https://wandbox.org/permlink/J9kxSzLshRQsdt0e