gpt4 book ai didi

c - 为什么 ANSI C 没有 namespace ?

转载 作者:太空狗 更新时间:2023-10-29 16:15:43 24 4
gpt4 key购买 nike

对于大多数语言来说,拥有命名空间似乎是轻而易举的事。但据我所知,ANSI C 不支持它。为什么不?是否计划将其包含在未来的标准中?

最佳答案

为了完整起见,在 C 中有几种方法可以实现您可能从命名空间中获得的“好处”。

我最喜欢的方法之一是使用一个结构来容纳一堆方法指针,它们是您的库/等的接口(interface)。

然后您使用此结构的外部实例,您在您的库中初始化该实例以指向您的所有函数。这使您可以在库中保持名称简单,而无需踩到客户端 namespace (全局范围内的外部变量除外,1 个变量与可能数百个方法..)

涉及一些额外的维护,但我觉得它很少。

这是一个例子:

/* interface.h */

struct library {
const int some_value;
void (*method1)(void);
void (*method2)(int);
/* ... */
};

extern const struct library Library;
/* end interface.h */

/* interface.c */
#include "interface.h"

void method1(void)
{
...
}
void method2(int arg)
{
...
}

const struct library Library = {
.method1 = method1,
.method2 = method2,
.some_value = 36
};
/* end interface.c */

/* client code */
#include "interface.h"

int main(void)
{
Library.method1();
Library.method2(5);
printf("%d\n", Library.some_value);
return 0;
}
/* end client code */

. 语法的使用与经典的 Library_function()Library_some_value 方法建立了强关联。但是,有一些限制,例如您不能将宏用作函数。

关于c - 为什么 ANSI C 没有 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com