我听到一些人说__fastcall比__cdecl和__stdcall更快,因为它将两个参数放在寄存器中,而其他调用只有一个;但是,在另一方面,这不是C语言中使用的标准。 我想知道什么使__fastcall成为C语言标准中不理想的选项,以及何时在我的代码中使用它。
我听说过一些方法,但都不是很实用。个人尽量避免在C语言中使用复杂数据类型,而是将其分解成组件typedef。 现在我需要维护一些所谓的“三星程序员”编写的遗留代码,我很难阅读其中一些 ***code[][]. 你如何阅读复杂的C语言声明?
有一些调用约定(例如 pascal,stdcall),但据我所知,C 使用的是 cdecl (C-声明)。这些约定中,每个约定在调用者如何将参数加载到堆栈上以及哪一个(调用方 / 被调用方)清理堆栈的方式略有不同。 谈到清理堆栈,这就是我的问题。我不明白:这三件事情是否不同? 堆栈清理 ...
我已经花了一整天的时间研究这个问题,但仍然无法理解: 我有一个C# DLL,其中PInvokes调用了一个C++ DLL中的方法。在Debug模式下编译时,我没有遇到任何问题,但在Release模式下编译时,我会遇到AccessViolationException异常。通过谷歌搜索,我发现可...
我知道__stdcall函数不能有省略号,但我想确认是否有平台支持使用非__cdecl或__stdcall调用约定来支持stdarg.h函数。
我有一个第三方C API,需要一个__stdcall回调函数。 我的代码提供了一个外部提供的__cdecl回调函数。 由于它们被认为是不同类型,因此我无法将我的函数指针传递给C-API。 绕过类型系统并使用reinterpret_cast<>自然会导致运行时错误。 下面是来自这...
结构体在汇编中如何作为参数传递? 由于结构体的大小通常比较大,个别字段是否按顺序依次传递? 如果是,它们是否像普通参数一样按相反的顺序传递? cdecl和stdcall之间是否有任何差异?
以下通过指向成员函数的指针调用 D::foo 函数的方法将会生成错误:必须使用 .* 或 ->* 在 'f (...)' 中调用指向成员函数的指针。当然,这不是我们调用指向成员函数的方式。 正确的调用方式是 (d.*f)(5); 或者 (p->*f)(5); 我的问题是,“有没...