C - Comment syntax in C language

Comment Syntax In C Language

当我们在VC下开发时误以为C语言有两种注释语法,即///**/,但是事实上却并非如此,不同版本的C标准中有的可以使用前一种注释语法,但在有的标准下却无法使用,下面将给出标准的详细介绍,GCC对C标准的支持,以及注释语法的替代方案

C Comment Syntax

首先要明白C语言处于不断进化的过程,随着时间的推移,现在有若干的C语言标准,不同标准对C语言语法,标准库函数等做了规定,同时GCC编译器不仅提供了对各个标准的支持还提供了自带的GCC语言扩展特色(详细介绍

第一版标准C(即ANSI-C,也称为C89或C90亦或iso9899:1990)允许的注释语法仅仅有/**/并且不允许注释嵌套(注释结束符尽早匹配,多行注释不允许嵌套不仅仅存在于ANSI-C标准,后续标准也有此规定)

标准C99中C语言才引入注释语法//,也就是说在ANSI-C标准下是无法使用//风格的注释语法的,如果你在gcc编译语言时报错expected expression before ‘/’ token,恭喜你,这是因为gcc以ANSI-C模式工作,但是你的源码中却有//风格的注释,下面我们将提出几种方案了解决这个问题

GCC下编译单行注释

  1. 将gcc切换为C99标准

     $ gcc -std=c99 test.c
    
  2. 将gcc切换为gcc扩展标准

     $ gcc -std=gnu89 test.c
    

    提示:你可以通过gcc选项-pedantic来报告不合ANSI-C标准的语句

注释的替代方案

  1. 使用宏定义

     #define COMMENT(c)
    
     int main(int argc, char *argv[])
    
     {
    
         printf("%s\n", "mouse");
    
         COMMENT(printf("%s\n", "dog");)
    
         return 0;
    
     }
    
  2. 使用条件编译

     #if 0
    
     The content of comments
    
     #endif
    

    当你要注释大段代码而又不知道其中是否已经有了/**/注释时(如果有的话,再用/**/注释就形成嵌套注释了)使用该方法最为保险

Xiao Wenbin
Xiao Wenbin
Natural Language Processing Engineer

My research interests include machine learning, information retrieval and natural language processing.

Related