是否有一个方便的过程可以使 C 头文件适合 C++?

问题描述 投票:0回答:1

我在 C99 中有一堆标头,它们使用 VLA 指针功能来阐明哪个参数决定数组参数的大小,如下所示:

void do_something(int n, float a[n]);

显然,当尝试将其包含在 C++ 源代码中时,这个 (

[n]
) 不会解析为
extern "C"
,因为 C++ 不屑于追赶比我们最年轻的员工更老的 C 标准。

有没有一种方便的方法可以实现这一点,即无需手动编辑 .h 文件?也许有一些工具可以将声明翻译为等效的(就实现的内容而言)

void do_something(int n, float *a);

我知道 __counted_by 但我还没有准备好将代码库迁移到 C23。

c++ c
1个回答
0
投票

当尝试将其包含在 C++ 源代码中时,这个 (

[n]
) 不解析为
extern "C"

是的,主要是因为

extern "C"
是关于 C 链接(与名称修改、调用语义、有关),而不是 C 语法

有没有一种方便的方法来实现这一点,即无需手动编辑 .h 文件?

一些 C++ 编译器接受 C VLA 作为扩展。 但不,标准 C++ 语言不提供您可以进行的任何一次性声明、您可以定义的任何宏或任何其他使 C VLA 声明在 C++ 中的含义与在 C 中相同的内容。即使只是在函数原型中,这就是您的情况所需要的。

您可以想象找到或编写一个自动执行此类源转换的工具,但是构成工具请求的问题的任何方面在这里都是偏离主题的,并且构成编写此类工具的建议请求的任何方面都过于宽泛.

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