我是一个自学C语言的初学者,几周前我有了用标签而不是注释来标记代码块的想法。我不是把它们用于流控制(我从未使用过goto(,而是为了区分我的注释(我用它们来处理bug、todo和"文档"(和我的代码块;标题";或";标题";,以提高可读性。例如:
int main()
{
while(true)
{
Update:
DoSomething1();
DoSomething2();
DoSomething3();
Render:
DrawSomething1();
DrawSomething2();
}
}
需要注意的一点是,如果标签后面有声明,代码将不会编译,但您可以添加;在标签后或在适当的地方使用括号(注意范围等(
Initialization:;
int width, height;
DoStuff:
{
width = 640;
height = 480;
}
我也用它来做一些事情,比如:
Player1: entities[0] = PlayerCreate(1);
Player2: entities[1] = PlayerCreate(2);
这样做有什么负面影响吗?未定义的行为或我应该注意的事情?
顶级注释非常善于描述为什么使用标签是个坏主意。
但是,我想添加另一个原因:
- 它们不够描述性
- 标签实际上不完整/差评
好的评论应该表明的意图。也就是说,该代码显示如何。注释解释了什么和/或为什么。
也就是说,如果我们这样做:
FILE *fin = fopen("data.txt","r");
我们要打开什么文件?而且,为什么我们要打开它?
这里有一个更好的尝试:
// open the customer file [so we can read it] and be able to validate the name
// and account number of the proposed transaction(s)
FILE *fin = fopen("data.txt","r");
在第一个块中,您有:
while (!MustClose())
必须关闭什么和为什么?
此外,您还有Update:
和Render:
同样,你在更新什么,why您渲染的是什么,为什么?
在中的第二个块中有:
Initialization:;
int width, height;
您在此处初始化的不是。你在定义。并且,width
和height
是什么的维度?绘图板、窗口、表面、主窗口、子窗口?
你最好使用(例如(:
// dimensions of main window (in pixels)
int width, height;
在第三个块中,您有:
Player1: entities[0] = PlayerCreate(1);
Player2: entities[1] = PlayerCreate(2);
这里Player1:
是多余的多余cruft。它对PlayerCreate(1)
是多余的
这就像在做:
x = 5; // set the value of x to 5
而且,没有东西来描述块实际在做什么。我们必须推断我们正在从PlayerCreate
创建玩家。
而且,如果entities
有(例如(1000个元素呢?然后,我们会做:
// create all players
for (int i = 0; i < 1000; ++i)
entities[i] = PlayerCreate(i + 1);