【问题标题】:Do I need to specify calling convention in both header and source files我是否需要在头文件和源文件中指定调用约定
【发布时间】:2019-05-05 06:31:02
【问题描述】:

我需要在头文件和源文件中指定调用约定吗?

例如,

header.h

void __cdecl Foo();

source.cpp

void __cdecl Foo()
{
}

【问题讨论】:

    标签: c++ visual-c++ language-lawyer


    【解决方案1】:

    没有。

    来自the docs

    对于非静态类函数,如果函数是外联定义的,调用约定修饰符不必在外联定义中指定。也就是说,对于类非静态成员方法,声明期间指定的调用约定在定义点被假定。鉴于此类定义:

    struct CMyClass {
       void __cdecl mymethod();
    };
    

    这个

    void CMyClass::mymethod() { return; }
    

    等价于:

    void __cdecl CMyClass::mymethod() { return; }
    

    【讨论】:

    • 这不只适用于成员函数吗?另外,被调用者怎么能忽略调用约定(正如你最后一段所暗示的那样)?
    • 调用约定对调用者和被调用者双方同样重要。它必须匹配。
    • @PasserBy 是的,删除了最后一件事。我不知道为什么这些文档都特定于非静态成员函数(对于所有调用约定)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多