【问题标题】:Is preceding a function with CALLBACK or WINAPI or PASCAL (in MFC) is absolutely necessary or only for readability purpose?使用 CALLBACK 或 WINAPI 或 PASCAL(在 MFC 中)的函数之前是绝对必要的还是仅出于可读性目的?
【发布时间】:2012-03-07 18:27:00
【问题描述】:

MFC VC++ 中,setTimer 函数是使用CALLBACK 过程设置的。从link我读到了

标有 __stdcall 的函数使用标准调用 约定如此命名是因为所有 Win32 API 函数(除了少数 接受可变参数)使用它。

据我所知,所有的 VC++ MFC 函数都使用__stdcall 作为它们的调用转换。

CALLBACK定义如下....

 #define CALLBACK __stdcall

我读过的内容: 在函数前面加上 CALLBACK 用于强调特定函数将在必要时自动调用(例如 setTimer 案例或 javascript 中的 onClick 案例),

我的疑问是,在 MFC VC++ 所有功能(除了少数 采用可变参数)具有 __stdcall 的默认调用约定。因此,在 CALLBACKWINAPIPASCAL 的函数之前或不之前具有相同的效果?

【问题讨论】:

    标签: mfc timer callback calling-convention stdcall


    【解决方案1】:

    计算机绝对有必要吗?这取决于上下文。 When you mismatch the calling convention,您可能会很幸运,因为堆栈上的数据类型恰好符合 API 的要求,或者当您的代码为 run on a different architecture like x64 并且每次都崩溃时,它可能会惨遭失败。

    对于维护程序员来说绝对有必要吗?是的,是的。你知道,可怜的人将不得不弄清楚你的非标准约定和聪明的“优化”。总有一天,那个可怜的人可能就是你。

    The compiler was yelling at you for a reason 当你试图颠覆 API 时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多