【发布时间】:2014-02-04 19:46:38
【问题描述】:
我正在尝试在 c++ 代码上使用一些 C 函数(由我制作)。 我正在使用 Eclipse。
Main.cpp 代码:
#include <Windows.h>
extern "C" {
#include "f.h"
}
int main(){
return 1;
}
现在 f.h 有很多功能,但是在具有此初始化行的功能上却给了我错误。
所以我的f.h 代码只有这个:
char o[9] = "00000000\0";
但是……
initializer-string for array of chars is too long f.h
如果我用 C 编译它,它会工作......为什么?
【问题讨论】:
-
如果您在 C 中为
char数组指定一个长度,并使用那么多字符对其进行初始化,则不会将 0 终止符附加到字符串中。不过,我不知道 C++ 中的情况如何,但我知道这是有效的 C。 -
是的,事实上在 C 中是有效的!在 C++ 中不是!但是对于 extern "C",我想让它在 C++ 中有效(但它不起作用)
-
afaik,
extern "C"制作函数原型 C 函数原型。我认为这主要是关于调用约定和使用的名称修饰,而不是关于什么语法是有效的。但我不知道 C++ 有多好…… -
顺便说一句……用例是什么?您想在字符串常量中使用省略 0 终止符的 C 特性并手动提供。为什么?
-
这只是一个例子,我不想修改我所有的 C 函数。当然我可以用 C++ 重写它们,但我想直接在 C 中加载它...