Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 可能有单独的;名称空间;在一个文件中?_C_Namespaces - Fatal编程技术网

C 可能有单独的;名称空间;在一个文件中?

C 可能有单独的;名称空间;在一个文件中?,c,namespaces,C,Namespaces,是否可以通过在同一个文件中使用单独的文件来阻止对变量和函数的访问?就像在javascript中使用匿名函数一样。您可以隐藏静态函数或静态变量的声明可以跟在它隐藏的函数后面。使用宏,您可以在定义函数或变量后通过黑客手段隐藏它 static void foo () { /* ... */ } static int g_hidden_from_foo; static void bar () { /* can use foo() */ } #define foo foo_is_now_private /

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

您可以隐藏静态函数或静态变量的声明可以跟在它隐藏的函数后面。使用宏,您可以在定义函数或变量后通过黑客手段隐藏它

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

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

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

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


如果你使用C++,那么你可以通过使用保护和私有成员的类来进一步做一些事情,因为C++保护语义是每个类而不是每个翻译单元。文件本身是有意识的,所以只需使用前缀来表示名称空间,或者首先以不同的方式命名函数。@Dave-好奇和方便。