2

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

4

2 回答 2

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 有嵌套函数,这或多或少类似于匿名函数。

于 2013-06-11T23:59:48.570 回答
1

这在 C 中是不可能直接实现的。C 中的代码单元是翻译单元,这是表示您正在编辑的文件(加上头文件)的奇特方式。

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

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

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

于 2013-06-12T00:02:03.123 回答