我想与我从C ++程序编写的C库进行交互。 C库使用现代C语言编写,并利用static
数组说明符显示了数组的最小长度,或者指针不能为NULL
。
[当我尝试使用此功能编写与extern "C"
功能接口的程序时,出现以下消息:
错误:静态数组大小是C99的功能,在C ++中是不允许的
是否无法与此C库连接?我需要修改C库,还是可以使用替代方法?
这里是导致错误的示例程序:
// foo.h
#ifndef FOO_H
#define FOO_H
void foo(int i[static 1]);
#endif //FOO_H
// foo.c
#include <stdio.h>
void foo(int i[static 1]) {
printf("%i", i[0]);
}
// main.cpp
extern "C"
{
void foo(int i[static 1]);
}
int main() {
int i[] = {1};
foo(i);
}
extern "C"
向C ++编译器指示不应修改函数名称。由于您要链接到外部库,因此期望该外部库具有一个称为foo
的函数(并且只有一个函数)。 C99以及以后的数组大小中的static
关键字告诉编译器“此数组将至少为此大小”,这可能允许编译器进行某些优化(我不知道这些优化可能是什么,但是考虑到它可能会循环展开到N = 4
,在此声明为void foo(int i[static 5]);
。如果传递的数组的大小不小于此大小,则可能会遇到麻烦。
(这是约翰答案的其他信息)