微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用多个.cpp文件时调用函数

如何解决使用多个.cpp文件时调用函数

当我调用内联函数时,我想问一个关于输出的问题,该函数是在MyHeader.hsource_1.cpp文件中使用{ source_2.cpp文件中的int main()函数

当我进行这样的调用时,将调用source_2.cpp函数内部定义的那个。代码就像;

我的source_1.cpp包含以下代码行:

MyHeader.h

我的#pragma once #include <iostream> inline int func(void); 包含以下代码行:

source_1.cpp

我的#include "MyHeader.h" int func(void) { std::cout << "func(),inside source_1,was called. 102 * 102 will be returned." << "\n"; return 102 * 102; } void source_1(void) { std::cout << "source_1() was called. func() will be called." << "\n"; func(); } 包含以下代码行:

source_2.cpp

这是输出

#include "MyHeader.h"

int func(void)
{
    std::cout << "func(),inside source_2,was called. 102 * 102 will be returned." << "\n";
    return 102 * 102;
}

void source_2(void)
{
    std::cout << "source_2() was called. func() will be called." << "\n";
    func();
}


int main()
{
    std::cout << "main() was called." << "\n";
    source_2();
}

我想知道原因。

解决方法

您违反了one definition rule。不允许在程序中使用不同的实现的非静态对象。编译器/链接器可以自由选择找到的任何实现,这可能会导致很难发现错误。

,

您的source_2函数称为func的{​​{1}}函数,因为source_1.cpp被声明为func,而不是inline。链接器获得static函数时,它将删除该函数的所有副本(一个除外)。因此,将保留inline的{​​{1}}函数,而其他函数将被链接器删除。如果要在两个源文件中对一个函数进行两个单独的实现,请将函数声明为func。这样可以防止链接程序删除具有相同名称的多个功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。