2016-07-14 55 views
1

我注意到,看示例代码的片段(如下面),大多数使用独占多行/ * * /注释,而不是单行//注释。为什么是这样?为什么很多示例在c/C++中只使用多行注释?

http://www.freertos.org/RTOS_Task_Notification_As_Event_Group.html

我一直觉得这是一个有点讨厌,因为它阻止我如果有必要注释掉的代码块,即当你复制的码位到一个新的项目,并没有但更新了所有相关功能以在新项目中编译。

我发现的唯一信息是,平台之间如何处理新行可能存在问题,某些系统可能无法正确解释新行以结束单行注释。这是唯一的原因吗?这些示例遵循的是否有一些样式指南禁止单行注释?

+1

对于多行注释来说,这很容易。使用// vs/* * /仅仅是一种没有正确技术的样式选择 –

+3

很长一段时间'''''''''''* /''是所有可用于便携式C的类型。因此,旧的C程序员更可能选择这种形式。请注意,在你的例子中'&ulNotifiedValue'是一个C风格的超参数。 –

+0

不确定为什么你标记为C++? FreeRTOS是用C编写的。 –

回答

5

您使用FreeRTOS教程作为C++的示例。如果你看看FreeRTOS的sources,你会发现它实际上是用C编写的,而不是C++。

在C语言中引入C风格的单行注释(//)之前并不存在于C语言中。很多代码,包括教程,都是在C99之前编写的。甚至可以编写新的C代码而不使用新的语言功能,以保持程序与不支持新规范的较旧编译器兼容 - 或仅仅由于旧习惯或偏好。

我一直觉得这是一个有点讨厌,因为它阻止我如果有必要

使用此注释掉的代码块临时禁用的代码块:

#if 0 
/* Bits in this RTOS task's notification value are set by the notifying 
    tasks and interrupts to indicate which events have occurred. */ 
    xTaskNotifyWait(0x00,  /* Don't clear any notification bits on entry. */ 
        ULONG_MAX, /* Reset the notification value to 0 on exit. */ 
        &ulNotifiedValue, /* Notified value pass out in 
              ulNotifiedValue. */ 
        portMAX_DELAY); /* Block indefinitely. */ 
#endif 
0

通常它与编码标准有关。标准是一种书写习惯(在群体/计算机语言/公司之间),旨在使代码更具可读性,并使其看起来像是单个编码人员完成的(标准目标)。并非所有公司都有相同的标准,但freertos使用/ * * /(和Google例如使用//)。

这就是您为我们标记的代码拥有这些/ * * /的主要原因,因为这就是公司如何编写它的代码所达成的共识。

+0

_“使它看起来像是一个单一的编码人员写的(标准的目标)。”_不,编码标准故意承认代码是由多人/多人编写的;我们的目标是确保他们都可以使用通用的“语言”来理解彼此的代码。 –

+0

这个答案无论如何都是空的。它只是把目标移到“好吧,好吧,为什么是公司的编码标准?” –

+0

你不能要求_why_约定,因为约定是某人决定的。编码标准的主要目标是让它看起来像是一个单独的编码器写的,这增加了可维护性并降低了复杂性。如果代码看起来像是由几个人编写的,那么代码可能没有任何标准。 –

0

两条单行注释//和多行注释/* */都是有效的C++。为什么有人使用这种方式纯粹是品味和个人喜好的问题。

如果你有一个体面的文本编辑器,例如Emacs,标记块评论,然后做M-x comment-region或类似的其他编辑器/ IDE,它们都不会阻止你评论代码块,他们会做正确的事情。如果不;得到一个更好的编辑器/配置为您的当前编辑器。

0

要描述一个程序我们在开始时编写的东西我们通常使用/ * * /因为它可以通过多行并描述特定的行什么和它的功能//

0

您正在查看的代码很可能是或最初是在C中编写的。除此之外,编码只是一种风格选择,也可能是这个项目的主角选择了这种风格。有两种方法来解决这个问题:

#if 0

#if 0 
    some code we hate 
#endif 

OR

如果您使用的是IDE,它很可能,他们必须注释掉的代码块的选项:

enter image description here

导致此:

// stuff; 
// stuff; 
// stuff;