我意识到这很大程度上取决于个人偏好,但我很好奇以下是否有明显的缺点;
我发现自己经常在同一个文件中将源代码分成逻辑组(通过“注释”)。例如:
//----------------------------------------------------------------------------
#include "..."
//----------------------------------------------------------------------------
#include <...>
//----------------------------------------------------------------------------
#include <boost/...>
//----------------------------------------------------------------------------
#include <os-specific/...>
//----------------------------------------------------------------------------
namespace
{
void Foo()
{
}
}
//----------------------------------------------------------------------------
namespace
{
void Bar()
{
}
}
//----------------------------------------------------------------------------
namespace
{
void Baz()
{
}
}
//----------------------------------------------------------------------------
int main()
{
}
//----------------------------------------------------------------------------
//This file ends with a new-line.
或者:
//----------------------------------------------------------------------------
#ifndef FOO_HEADER_INCLUDED
#define FOO_HEADER_INCLUDED
//----------------------------------------------------------------------------
#include "..."
//----------------------------------------------------------------------------
namespace Foo
{
void Bar();
}
//----------------------------------------------------------------------------
#endif
//----------------------------------------------------------------------------
//This file ends with a new-line.
我最近一直在阅读一些外星人来源,我注意到实际上没有人这样做了。
我可以提出反对这种“除法”的唯一论据是,当你以纵向模式打印源代码时,你的除数(如果长度超过80个字符)会被换行。但是,这在横向模式中不是问题。
说实话,我甚至不知道为什么或何时开始这样做。我的这个强迫症还有其他的缺点吗?
另外,对我来说,这种行为与语言无关;我前几天写了一个shell脚本,注意到完全相同的行为模式。
答案 0 :(得分:4)
很久以前,我常常做很多事情。我有包含,声明,函数等块的章节标题。
我放弃这样做有几个原因:
还有一件事需要维护。您需要记住在编写新代码时添加它们,并在删除内容时将其删除。我宁愿花费精力去研究代码本身,而不是想知道某些东西是否足够大以保证休息。
有些事情不容易分类。假设您想在函数中嵌套一个小类。你真的要在你的功能中添加这样的一行吗?
更聪明的编辑器可以更轻松地在代码中导航。最初,当在文件中上下滚动查找内容时,它们是一种很好的标记。但是在Emacs中,我通过增量搜索和标签文件跳过了很多。在我使用IDE的情况下,它会向我显示文件的一部分,让我一键点击它们。
随着我的进步,我转向更小,更少整体的模块。这些天,我只是将内容移动到新文件而不是将新部分添加到现有源文件中。文件本身提供逻辑分组。每个文件都是一个紧密而有凝聚力的单元 - 为什么要将其分解?
我一直转向使用Javadoc / Doxygen风格的评论。这些比随机水平线更具描述性,而且我也发现它们在代码中也看起来更好。
答案 1 :(得分:1)
区域是分割代码的更好方法。我现在的公司有一个反对“花箱”的政策(I.E.围绕着/ *****和**** /评论的东西),我相信它也适用于横条。
我坚持使用地区,让事情变得更好。
答案 2 :(得分:0)
在我看来你没有使用好的IDE。 例如,您可以使用VS中的#regions对代码进行分组。它比你的方法容易得多。
答案 3 :(得分:0)
我们中的一些人确实使用它们,尽管可能不如你那么自由。请参阅我对this question的回答。
答案 4 :(得分:0)
在C源文件中,我有一个模板,它将文件分成几个部分,如#define,typedef,静态(文件范围)变量定义和函数原型,公共函数和静态函数等。(类似于C头文件)。它们由一行“=”分隔。
与上述问题不同,这些不是为了对现有代码块进行分组而创建的。我启动这些部分,因为它为每个文件提供了一个有用的结构,并指示了我正在创建的代码的放置位置。
我在每个函数之间也有一行' - ',偶尔也会在其他部分的逻辑分组之间。
如果没有别的,我发现在滚动文件时能够看到函数的开始和结束位置很有用。