精华内容
下载资源
问答
  • C语言多行注释的正则表达式

    千次阅读 2019-12-12 15:36:56
    C语言多行注释的正则表达式 容易理解的版本 \/\*(\*(?!\/)|[^\*])*\*\/ 参考 [stackoverflow][1] 的回答 更巧妙的版本 \/\*(?:[^\*]|\*+[^\/\*])*\*+\/ 参考 [1]: ...

    本文主要采用 POSIX 标准下的扩展正则表达式 (POSIX-extended) 风格, 并使用了一些 POSIX 未定义但比较常用的特性.

    1 背景知识

    不同正则表达式引擎有些微的差异, 常用的正则表达式引擎罗列如下:
    Perl, PCRE, PHP, .NET, Java, JavaScript, XRegExp, VBScript, Python, Ruby, Delphi, R, Tcl, POSIX 等. (参见 https://www.regular-expressions.info/tutorial.html)

    基础概念此处不再赘述, 下面讲一些后面用到的 POSIX 标准中可能未定义的特性.

    1.1 前向匹配 (Lookahead)

    参见 https://www.regular-expressions.info/lookaround.html)

    • ?= (positive lookahead)
      Pattern1(?=Pattern2)
      
      匹配一个符合 Pattern1 的字符串, 并且它的后续是符合 Pattern2 的.
    • ?! (negative lookahead)
      Pattern1(?!Pattern2)
      
      匹配一个符合 Pattern1 的字符串, 并且它的后续是符合 Pattern2 的.

    1.2 分组与捕获 (Grouping & Capturing)

    参见 https://www.regular-expressions.info/brackets.html

    • ?: (Non-Capturing Groups)

      (?:Pattern)
      

      禁用小括号所表示的分组的默认捕获功能, 若不禁用, 则正则表达式引擎会将括号内的 Pattern 所匹配的字符串暂存起来, 带来不必要的开销.

      分组的作用与本文无关, 故不再赘述. 感兴趣者可参阅本节链接.

    2 正则表达式

    2.1 难点分析

    难点在于正则表达式是贪婪的 (是满足某个模式的最大匹配), 然而C语言注释是以 /* 开始, 遇到第一个 */ 结束, 是最小匹配, 因而下面的写法是错误的

    \/\*(.|\n)*\*\/		if . exclude newline	
    \/\*.*\*\/			if . include newline
    

    若有多个块注释, 则会从第一个块注释的开始匹配到最后一个块注释的结尾.

    因此我们需要使用正则表达式使得模式中间不得出现 */.

    2.2 容易理解的版本

    \/\*(?:\*(?!\/)|[^\*])*\*\/
    

    这个方案比较直观, 必须使用前向匹配, 了解前向匹配以后就很容易理解, 然而一些正则表达式引擎可能不支持前向匹配.

    该方案参考了 stackoverflow 上的回答.

    2.3 更巧妙的版本

    \/\*(?:[^\*]|\*+[^\/\*])*\*+\/
    

    这个方案就没那么直观了.

    前面的 /* 很好理解, 结尾的模式则是 */ 前面可以有若干(0\ge0)个 *.

    中间的模式为 (a) 若干(1\ge1)个 * + 非 / 亦非 * 的结尾; (b)* 的字符 两者的随机重复组合, 可以看到, 由于 (a) (b) 均不以 * 结尾, 且 (a) (b) 内不会出现 */, 故中间的模式不可能出现 */. 此外, 正是由于 (a) (b) 均不以 * 结尾, 故结尾的模式要补上若干个 * .

    此处使用 ?: 是为了性能优化, 对于不支持该特性的正则表达式直接去掉即可.

    该方案参考了 stackexchange 上的回答.

    3 测试

    推荐一个测试网站, 体验极佳
    https://www.regextester.com/93553

    展开全文
  • 注释单行注释两个减号表示单行注释,后面是注释内容,用法同C语言中的 //--我是单行注释 print('www.daemoncoder.com') --这里也是注释多行注释多行注释用 --[[ --]],表示,用法同C语言中的/* */--[[ 多行注释 多行...
    dc0ecbe965c3d9cf38b9531c5fc96c48.png

    注释

    单行注释

    两个减号表示单行注释,后面是注释内容,用法同C语言中的 //

    --我是单行注释 print('www.daemoncoder.com') --这里也是注释

    多行注释

    多行注释用 --[[ --]],表示,用法同C语言中的/* */

    --[[ 多行注释 多行注释 --]]

    关键词

    and break do else elseif end false for function if in local nil not or repeat return then true until while 

    这些是Lua语言的保留字,不同把这些用作标识符。

    标识符

    和其他言类似,Lua的标识符也是由 字母(A-Z、a-z)或 下划线(_) 或 数字(0-9)组成,且不能以数字开头,且不能是上述的关键词。如:

    www daemoncoder com _name create_time zhang3 li4

    以上这些都是合法的标识符。

    Lua语言区分大小写,daemonCoder 和 daemoncoder 是两个不同的标识符。

    一般约定,自定义的变量不要以下划线开头连接一串大写字母的名字(比如 _VERSION),这种形式被保留用于 Lua 内部全局变量。

    变量

    Lua变量的定义类似其他动态语言,不需要为变量声明数据类型(但是Lua是有数据类型的),下面看示例:

    353d7359f0cd0dbf6a663ad88a1c5102.png

    Lua的变量默认是全局变量,定义局部变量需要用local声明。

    上面示例定义了a到g多个变量,涉及到Lua的多种数据类型,这里我们先不关心,后续文章会详细介绍。但是需要注意变量b前面有local,是一个局部变量,其他均为全局变量。局部变量和全局变量的区别在于局部变量会在代码块结束的位置销毁,全局变量则不会,即使在一个方法内部定义,也可以方法外的其他地方被访问。这一点有点坑,所以在定义局部变量时一定不要忘加local,除非你明确地是要定义一个全局变量。

    再看这个例子:

    8073fef3468bca9e423c0b96cd7602c9.png

    可以看到:

    Lua可以在局部临时覆盖全局位置的变量。对局部变量重新赋值B,退出代码块之后再访问b就恢复了原来的值。

    Lua不存在的变量为nil。也可以手动给变量赋值nil来删除变量。否则变量会由Lua自动管理生命周期。

    更详细内容,请到 https://www.daemoncoder.com/

    展开全文
  • 巧妙地利用快捷键,可以大大加快我们操作电脑的速度。以下是Sublime中经常能用到的快捷键:1常用打开命令面板【Ctrl】+【Shift】+【P】选中当前...+【G】注释当前行【Ctrl】+【/】关闭当前打开文件【Ctrl】+【W】当...
    d0bdff6c986d8ef8480a262310223b6a.gif

    巧妙地利用快捷键,可以大大加快我们操作电脑的速度。以下是Sublime中经常能用到的快捷键:

    1

    常用

    打开命令面板【Ctrl】+【Shift】+【P

    选中当前括号内容,重复可选者括号本身【Ctrl】+【Shift】+【M】

    搜索项目中的文件【Ctrl】+【P】

    设置/删除标记【Ctrl】+【F2】

    跳转到第几行【Ctrl】+【G】

    注释当前行【Ctrl】+【/】

    关闭当前打开文件【Ctrl】+【W】

    当前位置插入注释【Ctrl】+【Shift】+【/】

    关闭所有打开文件【Ctrl】+【Shift】+【W】

    块注释,并Focus到首行【Ctrl】+【Alt】+【/】

    粘贴并格式化【Ctrl】+【Shift】+【V】

    选择单词,重复可选择下一个相同的单词【Ctrl】+【D】

    全屏【F11】

    选择行,重复可依次增加选择下一行【Ctrl】+【L】

    全拼免打扰模式,只编辑当前文件【Shift】+【F11】

    选择所有相同的词【Alt】+【F3】

    在当前行前插入新行【Ctrl】+【Shift】+【Enter】

    闭合标签【Alt】+【.】

    删除当前行 【Ctrl】+【X】

    查找并替换【Ctrl】+【Shift】+【F】

    替换【Ctrl】+【H】

    撤销光标位置【Ctrl】+【U】

    前往method【Ctrl】+【R】

    新建窗口【Ctrl】+【N】

    查找内容 【Ctrl】+【F】

    分屏显示【Alt】+【Shift】+【数字】

    用来更改或插入列内容【Shift】+【右键移动】

    切换打开第N个文件 【Alt】+【数字】

    可移动行【Ctrl】+【Shift】+【上下键】

    2

    选择类

    选中光标所占的文本,继续操作则会选中下一个相同的文本【Ctrl】+【D】

    选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑【Alt】+【F3】

    选中整行,继续操作则继续选择下一行【Ctrl】+【L】

    先选中多行按下快捷键,会在每行行尾插入光标,即可同时编辑这些行【Ctrl】+【Shift】+【L】

    光标移动至括号内结束或开始的位置【Ctrl】+【M】

    在下一行插入新行【Ctrl】+【Enter】

    在上一行插入新行【Ctrl】+【Shift】+【Enter】

    选中代码,按下快捷键,折叠代码【Ctrl】+【Shift】+【[】

    选中代码,按下快捷键,展开代码【Ctrl】+【Shift】+【]】

    向左单位性地移动光标,快速移动光标【Ctrl】+【向左键】

    向右单位性地移动光标,快速移动光标【Ctrl】+【向右键】

    向上选中多行【Shift】+【向上键】

    向下选中多行【Shift】+【向下键】

    向左选中文本【Shift】+【向左键】

    向右选中文本Shift】+【向右键】

    向左单位性地选中文本【Ctrl】+【Shift】+【向左键】

    向右单位性地选中文本【Ctrl】+【Shift】+【向右键】

    将光标所在行和上一行代码互换【Ctrl】+【Shift】+【向上键】

    将光标所在行和下一行代码互换【Ctrl】+【Shift】+【向下键】

    向上添加多行光标,可同时编辑多行【Ctrl】+【Alt】+【向上键】

    向下添加多行光标,可同时编辑多行【Ctrl】+【Alt】+【向下键】

    3

    编辑类

    合并选中的多行代码为一行【Ctrl】+【J】

    复制光标所在整行,插入到末尾【Ctrl】+【Shift】+【D】

    向右缩进【Tab】

    向左缩进【Shift】+【Tab】

    从光标处开始删除代码至行尾【Ctrl】+【K】+【K】

    删除整行【Ctrl】+【Shift】+【K】

    注释单行【Ctrl】+【/】

    注释多行【Ctrl】+【Shift】+【/】

    转换大写【Ctrl】+【K】+【U】

    转换小写【Ctrl】+【K】+【L】

    撤销【Ctrl】+【Z】

    恢复撤销【Ctrl】+【Y】

    左右字母互换【Ctrl】+【T】

    单词检测拼写【F6】

    展开全文
  • C语言中,注释有两种类型单行注释单行注释... //输出Hello,world多行注释多行注释就是注释中的代码,可以为多行,以符号”/“开头,以符号”/”结尾 示例代码/* printf("Hello,worldn");return 0; */注意在C语言中...

    C语言中,注释有两种类型

    单行注释

    单行注释通常用于对程序中的某一行代码进行解释,用”//”符号表示,后面为注释的内容

    示例代码

    Printf("Hello,worldn"); //输出Hello,world

    多行注释

    多行注释就是注释中的代码,可以为多行,以符号”/“开头,以符号”/”结尾

    示例代码

    /* printf("Hello,worldn");

    return 0; */

    注意

    在C语言中,有的注释可以嵌套使用,有的不能嵌套

    多行注释”/……/“中,可以嵌套单行注释”//”

    示例代码

    /* printf("Hello,worldn"); //输出Hello,World

    return 0; */

    多行注释”/……/”中,不能嵌套多行注释”/……/”

    /*

    /* printf("Hello,wolrd");

    return 0; */

    */

    上述代码,第一个开始符号,会和第二个结束符号匹配,然后,第二个结束符号,找不到开始注释符

    展开全文
  • 简述该参考是基于Doxygen注释规范进行简单归纳,可以适当根据自己的需求进行约定。...简单来说就是一个程序的文件产生工具,可将程序中的... 简单注释(1) 单行注释///(2) 多行注释/**2. 文件注释/***@file文件名*@brief...
  • c语言多行宏定义及其注释

    千次阅读 2014-03-18 20:40:34
    多行宏定义中的注释问题  早上在写代码时遇到这样一个问题:即如何在一个拥有多行的宏定义中做注释?,这里把方法演化的过程贴出来,可能对某些朋友有些借鉴意义。 宏定义高深莫测,而且是比较细节...
  • 巧用c语言风格的多行注释/**/

    万次阅读 2015-03-11 11:55:52
    很多编程语言都支持c语言风格的多行注释/**/,有时添加三个字符就可以达到类似#if 0 #endif 的效果
  • 这是多行注释,用三个单引号 这是多行注释,用三个单引号 这是多行注释,用三个单引号 ''' """ 这也是多行注释,用三个双引号 这也是多行注释,用三个双引号 这也是多行注释,用三个双引号 """ Lua的注释: --...
  • matlab 添加多行注释

    2019-09-29 20:00:06
    就像c语言那样一下子注释掉(使之不执行)多行,而不是用%仅仅一行一行地注释。谢谢! [/quote]可以的,有些时候为了调试需要把其中几百行命令都转变为注释,一个一个加%太烦了。有几个方法:1)方法一选中你要加...
  • 因为python不像c语言那样可以用/*xxxx*/进行多行注释,只能每一行用#来注释,如果有几百行那得注释到什么时候。除了老老实实的一行一行注释外,这里再分享几种方法: 第一种:把要注释的内容当作字符串,用‘xxx’...
  • C语言注释

    千次阅读 2017-11-26 15:02:24
    C语言中,注释有两种类型单行注释单行注释通常用于... //输出Hello,world多行注释多行注释就是注释中的代码,可以为多行,以符号”/“开头,以符号”/”结尾 示例代码/* printf("Hello,world\n"); return 0; */注意在
  • Python3中多行注释

    千次阅读 2019-07-09 22:29:31
    C语言中常用 /* …代码段… */ 或者 #if 0 …代码段… #endif 来注释一块代码段,而在Python中却是不一样的,使用 ‘’’ …代码段… ‘’’ 或者 “”" …代码段… “”" 来注释,例如下面这一块代码: ...
  • 其中/**/是多行注释,//是单行注释。 需要注意的是:C 语言的注释并不是可以出现在C 语言代码的任何地方。 比如下面的注释就是错误的: in/*…*/t I; 因为编译器会将注释替换成空格,替换后的语句并不是c语句,...
  • C语言中,注释有两种类型单行注释单行注释... //输出Hello,world多行注释多行注释就是注释中的代码,可以为多行,以符号”/“开头,以符号”/”结尾 示例代码/* printf("Hello,worldn");return 0; */注意在C语言中...
  • C语言:注释的作用

    千次阅读 2014-11-01 00:40:00
    注释:写给程序员看的,方便...4.多行注释不可以嵌套多行注释 注释使用的场景: 1.提取代码的时候 2.调试程序的时候 // 单行注释 /* 多行注释 */ 转载于:https://www.cnblogs.com/qianbi123/p/4066279.htm...
  • c语言的注释定界符详解c语言的注释定界符是什么1、最早期的C语言注释是:/* */2、后来又增加的行注释://其中/**/是多行注释,//是单行注释。需要注意的是:C 语言的注释并不是可以出现在C 语言代码的任何地方。比如...
  • C语言-注释

    2019-11-24 11:46:36
    2、多行注释: 语法: /*需要注释的内容 */ 或者使用如下: /* 注释的内容 */ 输入方法数据了/*回车就回出现注释格式 /* *待注释的内容 */ 功能:/* */符号里面的所有内容都被编译器忽略 解释某一条语句...
  • python语言的标识符使用规则和C语言类似,具体说明如下:第一个字符必须是字母或者下划线(_)。剩下的字符可以是字母、数字、下划线。区分大小写。比如foo跟Foo是不同的。标识符不能以数字开头,出了下划线外,其...
  • VS中多行代码的注释

    2020-06-23 14:43:49
    C语言多行代码的注释: 选中需要注释的多行代码 ----> 先Ctrl+K,然后Ctrl+C ,即可 对C语言多行代码注释的撤销: 选中需要注释撤销的多行代码----> 先Ctrl + K,然后Ctrl+U ,即可
  • 去除C语言文件代码中的注释采用python正则表达式去除c语言中的注释测试上方的两种表达式删除注释 ...多行注释的正则表达式: '\/\*(?:[^\*]|\*+[^\/\*])*\*+\/' 该正则表达式是匹配最短的一个“/*”开始
  • C语言注释转换

    2018-06-15 22:45:09
    简单操作:将以下注释全部转为c++注释风格 例如: //1.一般情况 int num = 0; /*int i = 0;*/ //2.换行问题 /*int i = 0;*/int j = 0; /*int i = 0;...//3....//4.多行注释问题 /* int...
  • 可以使用/*和*/分隔符来标注一行内的注释,也可以标注多行注释。例如,在下列的函数原型中,省略号的意思是 open() 函数有第三个参数,它是可选参数。注释解释了这个可选参数的用法: int open( const char *name...
  • 简述该参考是基于Doxygen注释规范进行简单归纳,可以适当根据自己的需求进行约定。...简单来说就是一个程序的文件产生工具,可将程序中的... 简单注释(1) 单行注释///(2) 多行注释/**2. 文件注释/***@file文件名*@brief...
  • C语言:注释转换项目

    2018-08-19 23:06:16
    分析:在把c注释转换为c++注释的过程中,有以下常见的7种情况: // 1.一般情况 int num = 0; /* int i = 0; */ // 2.换行问题 /* int i = 0; */int j = 0;...// 3....// 4.多行注释问题 /* int i=...
  • 【初识C语言注释

    2021-01-29 21:33:58
    /*xxxxxx*/ 一次可以注释一行或多行,但不能嵌套注释。 eg: #include <stdio.h> int main() { /* printf("%Hello world!"); /*printf("%Hello world!"); printf("%Hello world!");*/ printf("%
  • 本博客主要考虑以下几种情况,可能有的地方没有考虑到,望读者指出。// 1.一般情况/* int i = 0; */// 2.换行问题/* int i = 0; */int j = 0;...多行注释问题/*int i=0; int j = 0;int k = 0;*/int k
  • C语言注释

    2020-10-13 18:17:03
    单行注释: // // 写什么鬼注释 多行注释 /**/ /*写什么鬼注释 写什么鬼注释 写什么鬼注释*/ 多行注释 #if 写什么鬼注释 写什么鬼注释 写什么鬼注释 #endif
  • 大写C语言注释

    千次阅读 2017-01-07 18:17:58
    昨天无意中看到一道题:“编写一个...完整代码C语言注释说明C语言的注释分为两种,一种是单行注释,一种是多行注释。 单行注释:顾名思义就是当遇到换行之后即表示注释已结束,用//表示 多行注释:注释以/*开始并且以*
  • C语言注释、标识符以及关键字

    千次阅读 2015-03-08 13:04:10
    一.注释 注释在各个语言中都非常重要,注释由于解释代码的含义,能提高程序的可读性,注释掉的内容不会参与编译,注释有的时候既能方便自己又能方便他人,很多时候我们自己写的...注释分为单行注释和多行注释: 单行

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 509
精华内容 203
关键字:

c语言多行注释

c语言 订阅