首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言开发时的范围界定建议

C语言开发时的范围界定建议
EN

Software Engineering用户
提问于 2011-05-30 06:23:30
回答 1查看 452关注 0票数 5

在使用C开发库时,您对变量和函数作用域的建议是什么?

在C++中,OOP和名称空间使整个过程变得容易得多。但是如何用普通的C来实现呢?特别是如何在头文件和代码文件中使用关键字staticextern来管理作用域?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2011-05-30 06:41:09

extern上:作为一种规则,不要。文件之间唯一应该共享的东西是定义,通过头文件:函数声明(在C文件中)外部链接,没有作用域关键字。(全局变量本身就够糟糕的了:将它们链接到其他文件只会加剧问题。)

您应该在(C文件)定义的任何文件本地函数中使用static (通过头文件)不向其他文件公开(它从外部链接中省略了该函数,使全局命名空间不受污染)。(出于同样的原因,您可以在文件static中创建任何全局变量,但最好不要使用全局变量。)

至于名称空间,您的库应该同意所有函数/宏/结构/常量名称的通用前缀(Lua使用lua_表示核心API名称(LUA_表示常量),luaL_用于辅助内容,以及用于内部内容的各种其他‘lua-plus-a-a- and -下划线’前缀)。

对于实际的内部功能范围,如下所示:

代码语言:javascript
复制
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“必须在任何其他语句之前声明所有变量”限制的一个很好的解决方案,但是大多数人倾向于将变量作用域保持在函数的根上。

票数 13
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/80227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档