查找标记为 Extern C 的 Visual Studio 标准库函数的源代码

Finding source code of Visual Studio standard library function marked Extern C

提问人:mana 提问时间:7/9/2021 最后编辑:rioV8mana 更新时间:7/9/2021 访问量:176

问:

我目前正在尝试从标头中找到该函数的 Visual Studio 实现。std::laguerre<cmath>

我按照以下步骤操作:

  1. 我在 Visual Studio 中打开了一个文件窗口。.h
  2. 我添加了以下代码行:
#include <cmath>

double a = std::laguerre(1, 2);
  1. 我突出显示并单击“转到定义”。std::laguerre
  2. 然后,我双击了出现的长列表中以结尾的行。\include\cmath
  3. 然后我+-ed“laguerre(”并找到了这个代码:ctrlf
// FUNCTION laguerre
_NODISCARD inline double laguerre(const unsigned int _Arg1, const double _Arg2) {
    return __std_smf_laguerre(_Arg1, _Arg2);
}

在第 1186 行和第 1189 行之间。这几乎是我想要的,但我需要更多的实现细节。我需要知道如何实现。__std_smf_laguerre

  1. 然后我+-ed并找到了这部分代码:ctrlf__std_smf_laguerre
#if _HAS_CXX17
_EXTERN_C
_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_assoc_laguerre(unsigned int, unsigned int, double) noexcept;
...

_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_hermitef(unsigned int, float) noexcept;
_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_laguerre(unsigned int, double) noexcept;
_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_laguerref(unsigned int, float) noexcept;
...

_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_hypot3f(float, float, float) noexcept;
_END_EXTERN_C

在我看来,我要查看的功能已被标记。我知道这应该告诉链接器它可以在某处找到定义。EXTERN_C__std_smf_laguerre

我应该如何找到 的定义?__std_smf_laguerre

C++ 工作室 可视化 ++ C ++-标准库

评论

0赞 Some programmer dude 7/9/2021
我更感兴趣的是,为什么你需要知道这个函数的具体实现?通过找到实现,您需要解决的实际潜在问题是什么?是什么让你认为了解实现将有助于解决这个问题?它必须是这个特定的实现吗?我敢打赌,如果你稍微搜索一下,你可以找到许多其他实现,也许不仅仅是C++标准库实现,而是来自其他库和源代码。
0赞 mana 7/9/2021
@Someprogrammerdude是的,有一个由 cppreference 页面链接的 boost-library 实现。我需要的与计算拉盖尔多项式略有不同。我希望 Visual Studio 目前使用的是最快的算法,然后我可以更改他们的代码来获得我想要的东西。
1赞 molbdnilo 7/9/2021
如果你在“crt\src\stl\special_math.cpp”中查看,你会发现它只是在调用 .(找到 .)boost::math::laguerregrep -rin laguerre
0赞 rioV8 7/9/2021
你为什么不写出最快的实现并与我们分享
0赞 mana 7/10/2021
@rioV8如果是这样的话,它看起来有点复杂:reed.edu/physics/faculty/crandall/papers/Laguerre-f.pdf.我正在努力节省时间。当然,如果我最终编写了代码,它将在 GitHub 上提供。

答: 暂无答案