KarynaSakura 2024-07-26 20:49 采纳率: 41.7%
浏览 5

如何将C++代码编译为C语言代码?

g++无法将cpp文件编译为含有代码的o文件(Please Ignore Negative words, or replace them to other words, thanks.)

img


比如如下有3个文件: m.hpp, m.cpp, main.cpp

m.hpp文件内容如下

namespace testing
{
  int func(int a, int b);
}

m.cpp文件内容如下

#include "./m.hpp"

namespace testing
{
  int func(int a, int b)
  {
    return a + b;
  }
}

main.cpp

#include <iostream>
#include "./m.hpp"

int main(void)
{
  std::cout << testing::func(1, 2) << std::endl;
  return 0;
}

然后进行编译和连接

g++ -c main.cpp -o main.o
g++ main.o m.o -o main

就可以得到

undefined reference to `testing::func(int, int)'

img


将命名空间去掉可以解决。

img

(但是这样我又为什么要写C++呢?)

  • 写回答

3条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 20:49
    关注

    引自免费微信小程序:皆我百晓生

    将C++代码编译为C语言代码是不可能的,因为它们是两种不同的编程语言,具有不同的语法和特性。C++是C的超集,包含了C的所有特性,并增加了面向对象编程的特性,如类、继承、多态等。因此,C++代码通常不能直接转换为C代码。

    然而,如果您的目的是将C++代码编译为机器码并运行,那么您需要确保正确地编译和链接您的C++代码。在您提供的例子中,您遇到了“undefined reference”错误,这通常是由于链接器找不到函数的定义造成的。

    为了解决您遇到的问题,请按照以下步骤操作:

    1. 确保您的C++源文件(如main.cpp和m.cpp)都被正确编译为目标文件(.o文件)。
    2. 确保在链接时所有目标文件都被包含。在您的情况下,应该是main.om.o
    3. 使用适当的编译器命令进行编译和链接。对于C++,应该使用g++而不是gcc

    正确的编译和链接命令应该是这样的:

    g++ -c main.cpp -o main.o
    g++ -c m.cpp -o m.o
    g++ main.o m.o -o main
    

    关于您提到的命名空间问题,如果您在C++代码中使用了命名空间,那么在引用其中的函数或变量时,需要使用作用域解析运算符(::)来指定命名空间。例如,在您的代码中,应该使用testing::func来引用testing命名空间中的func函数。

    如果您尝试将C++代码编译为C语言的代码以在C环境中使用,那么您需要执行一些额外的步骤,例如将C++代码转换为C风格的代码(去掉C++特性,如类和异常处理等),然后按照C语言的编译规则进行编译。但这通常是不推荐的,因为会导致代码可读性和维护性的降低。最好的做法是在C语言环境中使用纯C代码,或在C++环境中使用C++代码。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月26日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络