用C++编译器编译c代码
问题描述:
我正在尝试使用一个c代码,我没有用自己的C++代码编写自己的代码。当我尝试编译下面的c代码时,出现错误。我不确定这个c代码试图用.xxx格式完成什么。我不胜感激任何帮助。用C++编译器编译c代码
const bmpfile_header_t bmp_fh = {
.filesz = offset + bmp_ih->bmp_bytesz,
.creator1 = 0,
.creator2 = 0,
.bmp_offset = offset
};
引发错误:在''之前缺少'}'。
答
的.field = value
都没有指定的(.field
)初始化指定的初始化为struct
,即bmp_fh.bmp_offset
被设置为值offset
,等等。你既可以给值结构的各个领域(按顺序)的领域,或者删除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编译器打包在一起应该不成问题。
下面是结构中'点'的含义[很好的描述] [1]。 [1]:http://*.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – jcoppens
不要编译C代码用C++编译器!这些是两种不同的语言,不幸的是它们共享了很多**语法**。但是,许多语义细微差别,可能会导致意外甚至未定义的行为。 – Olaf
你使用什么编译器? – Joe