您是否需要在C枚举的最后一个成员之后添加一个额外的“,”?

时间:2018-08-04 16:00:45

标签: c enums

我看到了一个enum的定义,如下所示:

enum DAY{MON = 1, TUE, WED, THU, FRI, SAT, SUN,};

...并且编译成功。

要在最后一个元素确定后添加一个额外的“,”吗?

2 个答案:

答案 0 :(得分:4)

  • 不,您不需要 最后一个逗号。
  • 是的,允许 放在结尾。

此声明:

 <html>
 <head>
 <style>
 section{
 	margin: 200px;
 }
 </style>
 </head>
 <body>
 <div class="aims-form">
  <div class="aims-form__navigation">
    <ul>
      <li>
        <a onClick="scrollToAchor('section1')" class="aims-form__anchor">Section 1</a>
      </li>
      <li>
        <a onClick="scrollToAchor('section2')" class="aims-form__anchor">Section 2</a>
      </li>
      <li>
        <a onClick="scrollToAchor('section3')" class="aims-form__anchor">Section 3</a>
      </li>
      <li>
        <a onClick="scrollToAchor('section4')" class="aims-form__anchor">Section 4</a>
      </li>
    </ul>
  </div>
  <div class="aims-form__form">
    <section>
      Section 1<a name="section1"></a>
      <br>
      Content coming soon...
    </section>
    <section>
      Section 2<a name="section2"></a>
      <br>
      Content coming soon..
    </section>
    <section>
      Section 3<a name="section3"></a>
      <br>
      Content coming soon..
    </section>
    <section>
      Section 4<a name="section4"></a>
      <br>
      Content coming soon..
    </section>
  </div>
</div>
<div style="margin-bottom: 500px;"></div>
<script>
function scrollToAchor(where) {
  var element = document.querySelector('.aims-form__form').querySelector('a[name="' + where + '"]');
  var position = element.offsetTop;
  for(let i = 10; i <= position; i+=10){
    setTimeout(function(){
  	window.scrollTo(0, i);
    }, i/2);
  }
}
</script>
</body>
</html>

...与...相同:

enum DAY{MON = 1, TUE, WED, THU, FRI, SAT, SUN,};

要了解允许使用此语法的优势,请查看@chqrlie's answer

答案 1 :(得分:4)

,定义或数组初始化程序中的结尾enum是可选的,但非常有用,尤其是在跨越多行的列表中。从C99开始,出于对称性考虑,允许这样做,因为它避免了列表中最后一项的不同语法:

enum DAY {
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN,
};

它使使用脚本生成数组内容变得更加容易,并且避免了容易出错的情况,在这种情况下,向数组添加额外的元素却忘记添加逗号可能不会被注意:

const char *osnames[] = {
    "CP/M",
    "MS/DOS",
    "Windows"
}

添加其他项目:

const char *osnames[] = {
    "CP/M",
    "MS/DOS",
    "Windows"
    "Linux",
    "OS/X"
};

请注意列表中间缺少逗号:编译器将第三个字符串解析为"WindowsLinux",并且该错误不会产生语法错误。

每行末尾有,,无需修改其他行即可轻松添加和删除项目。如以下示例所示,如果有条件地编译行,则更加有用:

const char *osnames[] = {
    "CP/M",
    "MS/DOS",
    "Windows",
#ifdef __UNIX__
    "Linux",
    "OS/X",
#endif
};