外部“ C”静态数组函数参数

问题描述 投票:5回答:2

我想与我从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);
}
c++ c c99 c11
2个回答
3
投票

extern "C"向C ++编译器指示不应修改函数名称。由于您要链接到外部库,因此期望该外部库具有一个称为foo的函数(并且只有一个函数)。 C99以及以后的数组大小中的static关键字告诉编译器“此数组将至少为此大小”,这可能允许编译器进行某些优化(我不知道这些优化可能是什么,但是考虑到它可能会循环展开到N = 4,在此声明为void foo(int i[static 5]);。如果传递的数组的大小不小于此大小,则可能会遇到麻烦。


1
投票

(这是约翰答案的其他信息)

© www.soinside.com 2019 - 2024. All rights reserved.