gpt4 book ai didi

c++ - 为什么 C++ 链接器不提示缺少这些函数的定义?

转载 作者:行者123 更新时间:2023-12-01 23:14:59 26 4
gpt4 key购买 nike

我写了这段代码:

// print.h
#pragma once

#ifdef __cplusplus
#include <string>

void print(double);
void print(std::string const&);
extern "C"

#endif

void print();

和源文件:

// print.cxx
#include "print.h"
#include <iostream>

void print(double x){
std::cout << x << '\n';
}

void print(std::string const& str){
std::cout << str << '\n';
}

void print(){
printf("Hi there from C function!");
}

和驱动程序:

// main.cxx
#include "print.h"
#include <iostream>

int main(){

print(5);
print("Hi there!");
print();

std::cout << '\n';
}

当我编译时:

gcc -c print.cxx && g++ print.o main.cxx -o prog
  • 程序运行良好,但对我来说最重要的是:

我使用 gcc 编译了 print.cxx,它没有定义 C++ 版本 print(double)print(std::字符串)。所以我得到 print.o,它只包含 print() 的 C 版本的定义。

  • 当我使用 G++ 编译和构建程序时,我将 print.o 连同源文件 main.cxx 传递给它。它生成可执行文件并且工作正常但在 main.cxx 中我调用了 print 的 C++ 版本(print(double)print (std::string)) 而这些未在 prnint.o 中定义,因为它是使用 GCC 编译的,并且由于宏 __cplusplus(条件汇编)。那么链接器为什么不提示缺少这些函数的定义呢?谢谢!

最佳答案

I compiled print.cxx using gcc which doesn't define the C++ version...

不完全是。 gccg++ 都调用相同的编译器套件。和套房has a set of file extensions自动识别为 C 或 C++。您的 *.cxx 文件全部编译为 C++,这是该扩展的默认行为。

您可以使用 -x 选项来覆盖默认行为。

关于c++ - 为什么 C++ 链接器不提示缺少这些函数的定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69111070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com