在使用C开发库时,您对变量和函数作用域的建议是什么?
在C++中,OOP和名称空间使整个过程变得容易得多。但是如何用普通的C来实现呢?特别是如何在头文件和代码文件中使用关键字static和extern来管理作用域?
发布于 2011-05-30 06:41:09
在extern上:作为一种规则,不要。文件之间唯一应该共享的东西是定义,通过头文件:函数声明(在C文件中)外部链接,没有作用域关键字。(全局变量本身就够糟糕的了:将它们链接到其他文件只会加剧问题。)
您应该在(C文件)定义的任何文件本地函数中使用static (通过头文件)不向其他文件公开(它从外部链接中省略了该函数,使全局命名空间不受污染)。(出于同样的原因,您可以在文件static中创建任何全局变量,但最好不要使用全局变量。)
至于名称空间,您的库应该同意所有函数/宏/结构/常量名称的通用前缀(Lua使用lua_表示核心API名称(LUA_表示常量),luaL_用于辅助内容,以及用于内部内容的各种其他‘lua-plus-a-a- and -下划线’前缀)。
对于实际的内部功能范围,如下所示:
void example()
{
char* msg = "Hello world!";
msg[1]='a';
msg[3]='d';
{
FILE * fOutput;
fOutput = fopen ("out.txt","w");
if (fOutput)
{
fputs (msg,fOutput);
fclose (fOutput);
}
}
}我个人很喜欢它们,觉得它们是ANSI C“必须在任何其他语句之前声明所有变量”限制的一个很好的解决方案,但是大多数人倾向于将变量作用域保持在函数的根上。
https://softwareengineering.stackexchange.com/questions/80227
复制相似问题