使用 C++ 编译器编译 C 代码

compiling c code with a c++ compiler

本文关键字:代码 编译 编译器 C++ 使用      更新时间:2023-10-16

我正在尝试使用我自己编写的c代码与我自己的c ++代码一起编写的c代码。当我尝试编译下面的 c 代码时,出现错误。我不确定这个 c 代码试图用 .xxx 格式完成什么。我不知所措,任何帮助将不胜感激。

const bmpfile_header_t bmp_fh = {
        .filesz = offset + bmp_ih->bmp_bytesz,
        .creator1 = 0,
        .creator2 = 0,
        .bmp_offset = offset
    };

抛出错误:在"."

.field = valuestruct字段的指定初始值设定项,即bmp_fh.bmp_offset设置为值offset等。您可以为结构的所有字段(按顺序)指定值,而无需指定的 (.field ) 初始值设定项,或者删除const并在之后分配值。

或者,除非您特别希望将 C 代码移植到 C++ 编译器,否则请使用 C 编译器编译 C 代码并将其链接到C++程序。C++代码可以调用 C 函数。

这些是指定的初始化器C++不支持它们。使用构造函数或删除构造函数,并按结构定义定义的顺序指定值。

请注意,.filesz = offset + bmp_ih->bmp_bytesz实际上看起来很可疑,因为 C 中的初始化器需要提供可以在编译器时计算的常量表达式。然而,例如 gcc 允许这样的局部变量,但const只是没有什么意义。

你应该用 C 编译器编译 C 代码并链接到它。若要引用变量和函数,请创建一个头文件,其中包含它们的声明,用extern "C" { }括起来,并将该标头包含在C++代码中。

请注意,C 和 C++ 虽然相似,但语言不同,因此应使用各自的编译器进行编译。extern声明的主要目的是指定链接到所包含声明的不同方式。

由于C和C++编译器经常使用C编译器打包在一起应该不是问题。