在C中为各种事物重复使用相同的缓冲区名称是一种常见做法吗?

bod*_*ydo 11 c buffer naming

例如,假设我有一个缓冲区char journal_name[25],我用它来存储日志名称.现在假设在代码中稍后几行我想将某人的名字存储到缓冲区中.我应该去char person_name[25]还是只是重用journal_name[25]

麻烦的是,每个阅读代码的人(以及几周之后我也必须了解journal_name)现在实际上是person_name.

但是反驳的论点是拥有两个缓冲区会增加空间使用量.所以最好使用一个.

你怎么看待这个问题?

谢谢,Boda Cydo.

Bli*_*ndy 16

以C方式解决这个问题的方法,如果你真的不想浪费内存,就是使用块来调整缓冲区的范围:

int main()
{
  {
    char journal_name[26];
    // use journal name
  }
  {
    char person_name[26];
    // use person name 
  }
}
Run Code Online (Sandbox Code Playgroud)

编译器将为两者重用相同的内存位置,同时为您提供完全清晰的名称.

作为替代方案,调用它name并将其用于<.<

  • +1这是做到这一点的方法.但请注意,即使没有作用域,编译器也可能足够聪明,可以确定在某个点之后没有使用`journal_name`,因此它可以为`person_name`使用相同的空格.即使使用范围,编译器也可以分配两个缓冲区.只需编写可读代码,不要担心在这里或那里"浪费"25个字节,除非您为严格约束的系统编写代码. (4认同)
  • 强制这样的范围是非常有用的,很遗憾许多人不知道这是可能的. (2认同)
  • `{char b1 [750*1024]; char b2 [751*1024]; sprintf(b1,"%d",1); sprintf(b2,"%d",2);} {char b2 [751*1024 ]; sprintf(b2,"%d",2);}`崩溃.`{char b1 [750*1024]; sprintf(b1,"%d",1);} {char b2 [751*1024]; sprintf(b2,"%d",2);}`工作正常.这是在MSVC 10,发布模式下. (2认同)

dir*_*tly 8

有些代码在这里真正有序.但有几点需要注意:

保持标识符与对象分离.叫它scratchpad或任何东西.此外,从它的外观来看,这个字符数组不是动态分配的.这意味着您必须分配足够大的便笺本才能重用它们.

更好的方法是使您的功能更短:理想情况下,一个功能应该一次做一件事.看看你是否可以分手并仍然面对这个问题.


小智 2

请用person_name[25]。没有人喜欢难以阅读的代码。就内存而言,它对你的程序没有多大作用(如果有的话)。请以可读的方式进行。