与具有静态链接的函数混淆

Confusion with functions with static linkage

本文关键字:函数 链接 静态      更新时间:2023-10-16

我不确定以下代码:

.lib项目

单位小时

namespace mynamespace {
    static void myFunction()
    {
      printf("hello world");
    }
    void myFunction2();
 }

单位.cpp

#include "Unit.h"
void myFunction2() { printf("hello world"); }

.exe项目

mainapp.cpp

   #include "Unit.h"
   int main()
   {
      mynamespace::myFunction();
      mynamespace::myFunction2();
      return 0;
   }

1) 为什么我会为myFunction2()获得"未解析的外部符号"?我包括了标题,而符号在另一个翻译单元中,怎么了?

2) static的意思应该是"具有内部链接",这是否意味着mainapp.cpp和unit.cpp都将拥有myFunction的"副本"?

您需要在命名空间中实现函数:

void mynamespace::myFunction2() { printf("hello world"); }

目前,在Unit.cpp中,您正在定义一个不同的函数;全局命名空间中名为CCD_ 1的函数。

。。。在命名空间中实现函数。。。

单位.cpp

namespace mynamespace {
  void myFunction2() { printf("hello world"); }
}