可以在一个文件中使用单独的“命名空间”吗?

时间:2013-06-11 23:50:48

标签: c namespaces

是否可以阻止对变量和函数的访问,就像拥有一个单独的文件但在同一个文件中一样?就像你在javascript中使用匿名函数一样。

2 个答案:

答案 0 :(得分:1)

你可以隐藏静态函数或静态变量的声明在它隐藏的函数之后可以跟随的意义。使用宏,您可以在定义函数或变量后隐藏它。

static void foo () { /* ... */ }
static int g_hidden_from_foo;
static void bar () { /* can use foo() */ }
#define foo foo_is_now_private
/* effectively hides foo */

这可能会满足您的好奇心,但我不能说这很方便(或明智)。

如果您愿意使用编译器扩展,GCC有nested functions,它或多或少类似于匿名函数。

答案 1 :(得分:1)

这在C中是不可能的.C中的代码单位是翻译单元,它是说出你正在编辑的文件(加上头文件)的奇特方式。

特定翻译单元中的任何代码都可以“看到”前面的任何声明和定义。没有办法在标准C中更改它。您可以使用宏或命名技巧来隐藏标识符,但您不能完全停止访问,尤其是不能以可读/方便的方式。

如果您愿意使用单独的文件,您可以简单地避免在公共头文件中放置声明以使数据“隐藏”,并且可以将函数声明设置为静态,以使其完全无法被其他翻译单元访问。

如果您使用C ++,那么您可以通过使用带有受保护成员和私有成员的类来进一步使用,因为C ++保护语义是每个类而不是每个翻译单元。

相关问题