精华内容
下载资源
问答
  • C语言 注释转换

    2017-07-29 16:35:44
    在编写代码中,经常会注释掉某段代码,C语言一般有两种方式:一种是/*xxxxxx*/,另一种是://xxxxx.第一种注释方式不能嵌套使用,在/与*的匹配上可能会造成理解错误,第二种注释可以注释掉一行,两种风格各有优缺点...

    在编写代码中,经常会注释掉某段代码,C语言一般有两种方式:一种是/*xxxxxx*/,另一种是://xxxxx.第一种注释方式不能嵌套使用,在/与*的匹配上可能会造成理解错误,第二种注释可以注释掉一行,两种风格各有优缺点,今天讲一下怎样将第一种风格转换成第二种风格。

    虽然转换本身不难,但要考虑到匹配时会出现多种情况,在这里,我们用到了状态机编程的思想。

    定义四种状态:NUL_STATE(无状态),C_STATE(C状态),CPP_STATE(C++状态),END_STATE(结束状态);四种状态转化如下图所示:


    在input.c文件里输入需要转换的代码:

    // 1.一般情况
    int i = 0;
    /* int j = 0; */
    
    // 2.换行问题
    /* int k = 0; */int m = 0;
    /* int tmp = 0; */
    int n = 0;
    
    // 3.匹配问题
    /*int k = 0;/*hehehe*/
    
    // 4.多行注释问题
    /*
    int i=0;
    int j = 0;
    int k = 0;
    */int m = 0;
    
    // 5.连续注释问题
    /*abc*//*def*/
    
    // 6.连续的**/问题
    /****/
    
    // 7.C++注释问题
    // /*abcdef*/
    转换后的结果在output文件中
    CommentConvert.h

    #ifndef __COMMEENT_CONVERT_H__
    #define __COMMEENT_CONVERT_H__
    
    #include <stdio.h>
    #include <stdlib.h>
    
    enum STATE
    {
    	NUL_STATE,
    	C_STATE,
    	CPP_STATE,
    	END_STATE
    };
    
    void DoNulState(FILE* pfIn, FILE* pfOut, enum STATE* state);
    void DoCState(FILE* pfIn, FILE* pfOut, enum STATE* state);
    void DoCppState(FILE* pfIn, FILE* pfOut, enum STATE* state);
    
    #endif//__COMMEENT_CONVERT_H__

    CommentConvert.c

    #define _CRT_SECURE_NO_WARNINGS
    #include "CommentConvert.h"
    void DoNulState(FILE* pfIn, FILE* pfOut, enum STATE* s)
    {
    	int first = fgetc(pfIn);
    	switch (first)
    	{
    	case '/':
    	{
    				int second = fgetc(pfIn);
    				switch (second)
    				{
    				case '/':
    					*s = CPP_STATE;//遇到//转换至C++状态
    					fputc(first, pfOut);
    					fputc(second, pfOut);
    					break;
    				case '*'://将/*转换成//,转换至C状态
    					*s = C_STATE;
    					fputc('/', pfOut);
    					fputc('/', pfOut);
    					break;
    				default:
    					fputc(second, pfOut);
    				}
    	}
    		break;
    	case EOF:
    		*s = END_STATE;//文件结束,转换至结束状态
    		break;
    	default:
    		fputc(first, pfOut);
    		break;
    	}
    }
    void DoCState(FILE* pfIn, FILE* pfOut, enum STATE* s)
    {
    	int first = fgetc(pfIn);
    	switch (first)
    	{
    	case '*':
    	{
    				int second = fgetc(pfIn);
    				switch (second)
    				{
    				case '/'://遇到*/转换至无状态,将*/去除或换行
    				{
    							*s = NUL_STATE;
    							int third = fgetc(pfIn);
    							if (third != '\n')
    							{
    								fputc('\n', pfOut);
    								ungetc(third, pfIn);
    							}
    							else
    							{
    								fputc(third, pfOut);
    							}
    				}
    					break;
    				case '*':
    					fputc(first, pfOut);
    					ungetc(second, pfIn);
    					break;
    				default:
    					fputc(first, pfOut);
    					fputc(second, pfOut);
    					break;
    				}
    	}
    		break;
    	case '\n'://多行注释的处理
    		fputc(first, pfOut);
    		fputc('/', pfOut);
    		fputc('/', pfOut);
    		break;
    	case EOF://文件结束,转换至无状态
    		*s = END_STATE;
    		break;
    	default:
    		fputc(first, pfOut);
    		break;
    	}
    }
    void DoCppState(FILE* pfIn, FILE* pfOut, enum STATE* s)
    {
    	int first = fgetc(pfIn);
    	switch (first)
    	{
    	case '\n':
    		*s = NUL_STATE;//C++状态注释一行结束,转换至无状态
    		fputc(first, pfOut);
    		break;
    	case EOF:
    		*s = END_STATE;
    		break;
    	default:
    		fputc(first, pfOut);
    		break;
    	}
    }
    test.c

    #define _CRT_SECURE_NO_WARNINGS
    #include "CommentConvert.h"
    
    void CommentConvert(FILE* pfIn, FILE* pfOut)
    {
    	enum STATE state = NUL_STATE;
    	while (state != END_STATE)
    	{
    		switch (state)
    		{
    		case NUL_STATE:
    			DoNulState(pfIn, pfOut, &state);
    			break;
    		case C_STATE:
    			DoCState(pfIn, pfOut, &state);
    			break;
    		case CPP_STATE:
    			DoCppState(pfIn, pfOut, &state);
    			break;
    		}
    	}
    }
    void test()
    {
    	FILE* pfIn = 0;
    	FILE* pfOut = 0;
    	pfIn = fopen("input.c", "r");
    	if (pfIn == NULL)
    	{
    		perror("open for read");
    		exit(EXIT_FAILURE);
    	}
    	pfOut = fopen("output.c", "w");
    	if (pfOut == NULL)
    	{
    		perror("open for write");
    		fclose(pfIn);
    		exit(EXIT_FAILURE);
    	}
    	CommentConvert(pfIn, pfOut);
    	fclose(pfIn);
    	fclose(pfOut);
    }
    int main()
    {
    	test();
    	return 0;
    }
    运行结果如下图:


    展开全文
  • C语言注释技巧

    2014-04-28 23:46:00
    C语言(C99)常见的注释方式有两种: 1./* 注释内容*/ 2.//注释内容 第一种一般用于多行注释; 第二种一般用于单行注释。 不过今天玩出个新花样,就是在使用第二种注释方式进行单行注释时,在行尾写一个"\...
    C语言(C99)常见的注释方式有两种:
    1./* 注释内容*/
    2.//注释内容
     
    第一种一般用于多行注释;
    第二种一般用于单行注释。
     
    不过今天玩出个新花样,就是在使用第二种注释方式进行单行注释时,在行尾写一个"\"(Backslash),那么这个单行注释的下一行就也是注释语句了。
    为什么呢?
    一想就明白了。"\"(Backslash)是转义字符,如果处于行尾的话,那么后边一个字符就是换行字符。接下来这个换行字符就被转义了,当然下一行只是在编辑器上看到的下一行,而编译器在编译时是不会把那个换行符认为是换行符的。因此,你看到的是下一行,但编译器却认为还是同一行。
     
    总归是个有些奇怪的玩法吧。

     

    转载于:https://www.cnblogs.com/superpig0501/p/3967588.html

    展开全文
  • C语言注释符号

    千次阅读 2019-07-28 00:45:23
    原文链接 C 语言的注释可以出现在C 语言代码的任何地方。这句话对不对?这是我当学生时我老师问的一个问题。我当时回答是不对。好,那我们就看看下面的例子: ...我们知道C 语言里可以有两种注释方式:/* */ 和//...

    原文链接

    C 语言的注释可以出现在C 语言代码的任何地方。这句话对不对?这是我当学生时我老师问的一个问题。我当时回答是不对。好,那我们就看看下面的例子:
    A)
    int/*...*/i;

    B)
    char* s="abcdefgh //hijklmn";

    C)
    //Is it a \
    valid comment?

    D)
    in/*…*/t i;

    我们知道C 语言里可以有两种注释方式:/* */ 和//。那上面3 条注释对不对呢?建议你亲自在编译器中测试一下。上述前3条注释都是正确的,最后一条不正确。
    A),有人认为编译器剔除掉注释后代码会被解析成inti,所以不正确。编译器的确会将注释剔除,但不是简单的剔除,而是用空格代替原来的注释。再看一个例子:
       /*这是*/#/*一条*/define/*合法的*/ID/*预处理*/replacement/*指*/list/*令*/
    你可以用编译器试试。
    B),我们知道双引号引起来的都是字符串常量,那双斜杠也不例外。
    C),这是一条合法的注释,因为\是一个接续符。关于接续符,下面还有更多讨论。
    D), 前面说过注释会被空格替换,那这条注释不正确就很好理解了。

    现在你可以回答前面的问题了吧?但注意:/*…*/这种形式的注释不能嵌套,如:
       /*这是/*非法的*/*/
    因为/*总是与离它最近的*/匹配。

    展开全文
  • C语言拾遗-注释

    2020-06-29 21:36:08
    在编写C语言源代码时,应该多使用注释,这样有助于对代码的理解。在C语言有两种注释方式

    C语言注释详解

    在编写C语言源代码时,应该多使用注释,这样有助于对代码的理解。在C语言中有两种注释方式:

    • 一种是以/*开始、以*/结束的块注释(block comment);
    • 另一种是以//开始、以换行符结束的单行注释(line comment)。

    可以使用/**/分隔符来标注一行内的注释,也可以标注多行的注释。例如,在下列的函数原型中,省略号的意思是 open() 函数有第三个参数,它是可选参数。注释解释了这个可选参数的用法:

    int open( const char *name, int mode, … /* int permissions */ );

    可以使用//插入整行的注释,或者将源代码写成两列分栏的格式,程序在左列,注释在右列:

    const double pi = 3.1415926536;       // pi是—个常量

    在 C99 标准中,单行注释正式加入C语言,但是大部分编译器在 C99 之前就已经开始支持这种用法。有时候,其被称作“C++风格”的注释,但实际上,其源自于C的前身 BCPL。

    在引号中,如果采用/*//分隔一个字符常量或字符串字面量(string literal),它们都不会被视为注释的开始。例如,下面语句就没有注释:

    printf("Comments in C begin with /* or //.\n" );

    预处理器仅通过检查注释的结束符来检测注释中的字符,因此,不能嵌套块注释。然而,可以使用/**/注释包含单行注释的源代码:

    /* 暂时注释掉这两行:
        const double pi = 3.1415926536;  // pi是一个常量
        area = pi * r * r;   // 计算面积
    暂时注释到此 */

    如果想要注释掉包含块注释的部分程序,可以使用条件预处理命令:

    #if 0
      const double pi = 3.1415926536;   /* pi是一个常量      */
      area = pi * r * r ;  /* 计算面积     */
    #endif

    预处理器会把每个注释都替换成一个空格。因此,min/*max*/Value变成两个标记min Value

    参考链接

    • https://blog.csdn.net/bornpride/article/details/88654353
    • http://c.biancheng.net/view/174.html
    • GB/T 15272-1994 (6.1.9)
    展开全文
  • C语言有两种注释方式: 1.一种是以/*开始、以*/结束的块注释(block comment); 2.另一种是以//开始、以换行符结束的单行注释(line comment)。 可以使用/*和*/分隔符来标注一行内的注释,也可以标注多行的...
  • C语言

    2019-10-26 14:24:11
    #include <stdio.h> /*预处理器指令*/ int main() /*主函数*/ { /*注释*/ printf("Hello, World! \n");/*输出*/ ...C 语言有两种注释方式: 1。//单行注释 2。/*多行注释*/ /* 多行注释 ...
  • C语言文件

    2019-03-19 13:52:08
    例子 现有一文件“student.dat”,该文件存放学生的数据包括:学号,姓名,性别,...注释方式有两种:第一种使用“//”进行单行注释 第二种以“/”开始,“/”结束,多行注释 实现从磁盘文件“d:\stu.dat”中读...
  • 本项目提供两种调试方式,一种是带界面操控(QT实现),一种是终端输入操控。本项目非常适合初学者用以参考学习。 下载源码: 源码下载解压后有两个文件夹,分别是QT工程和Dev-C++工程,前者带界面后者是终端输入...
  • c语言2

    2019-10-10 15:51:21
    两种注释方式://为单行注释 以/开始以/结束的为块注释 写程序时函数首部是int main 函数结束要以 return x 结尾 注意在写程序时 所有语言都要在英文原因环境下 包括标点符号 c语言的程序结构 1 一个或多个源...
  • C语言有两种注释方式,一种是单行注释,另一种是多行注释。 // 这是一个单行注释 /* 这是一个多行注释 */ 二、标识符和关键字 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称的一串字符。标识符中...
  • 初识C语言——3

    2021-04-08 18:53:41
    C语言中,种注释方式。 ①//xxxxxx,单行注释 ②/**/,多行注释。缺点:不支持嵌套 ③#if 0 #endif,这也是注释,可以嵌套。 当然最常用的还是第一,这里给大家介绍个快捷键: 1.快速注释:选中代码,按住ctrl...
  • 简单来说就是以下两种赋值方式为什么占用的栈空间不一样 ![![图片说明](https://img-ask.csdn.net/upload/201703/20/1490009487_161454.png)图片说明]...
  •  在C语言中采用的分隔符逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要一个以上的空格符作间隔, 否则将会出现语法...
  • C语言笔记(符号)

    2017-12-03 12:25:42
    注释符号 几个似非而是的注释问题 例子:(A) int / * ... * /i; (B) char * s = "abcdefgh //...我们知道C语言里可以有两种注释方式:“/* */” 和 “ // ”。那么上面几条注释是否正确。(A)中,有人认为Bain一
  • C语言字符串

    2020-11-16 20:41:05
    C语言字符串的长度、'\0'的细节详解引言声明定义字符串的两种方式功能快捷键合理的创建标题,助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...
  • 2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • C语言学习系统4.1

    2012-08-06 16:50:53
    2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,并...
  • C语言编程要点

    2017-09-18 00:10:37
    10.4. 移位和乘以2这两种方式中哪一种更好? 151 10.5. 什么是高位字节和低位字节? 151 10.6. 16位和32位的数是怎样存储的? 151 第11章 调 试 152 11.1. 如果我运行的程序挂起了,应该怎么办? 152 11.2. 如何检测内存...
  • 小白学习C语言2.1

    2020-07-31 17:25:09
    标题:小白学习C语言2.1 第一部分:显示hello world! 1、首先应该关闭防火墙和实时扫描,因为之前试过很多次如果不关闭,将...①、注释语句的表达:两种方式://或/* */ ②、printf输出,则必须编译预处理命令
  • C语言学习系统4.1PJ

    2014-02-23 14:58:31
    2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • C语言进行注释有两种方式。 第一种为以//开头的单行注释,如本程序使用的就是这种方式。 另一种为以“/”开始(在斜杠后应有一个星号,下文同理),“/”结束。这种方式可以实行多行注释,但注意“/”与“*/”属...
  • 1.4 最简单的C语言程序 #include <stdio.h> int main() { printf("This is a C program./n");...C语言允许用两种注释方式: (1)以//开始的单行注释。可单独占一行,也可出现在行的右侧,但不能跨行。如果
  • C语言】总结一

    2021-01-02 11:20:08
    C 语言有两种注释方式: // 单行注释 /* 单行注释 */ /* 多行注释 多行注释 多行注释 */ 以 // 开始的单行注释,这种注释可以单独占一行。 /* */ 这种格式的注释可以单行或多行。 注意:不能在注释内嵌套注释...
  • C语言入门加学习系统

    2008-11-24 00:51:27
    2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • 2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • 2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • 2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • 2、“函数说明”:收录了近400个函数,并包括详细使用说明和使用实例,并提供“按顺序查看”和“按类别查看”两种浏览方式。还可以用“按函数名”和“按功能”两种方式搜索函数。 3、“例题精解”:收录40道例题,...
  • C语言6——C 基本语法

    2021-04-20 10:59:36
    C 的令牌(Token) C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。 例如,下面的 C 语句包括五个令牌: ...C 语言有两种注释方式: // 单行注释 以//开始的单..

空空如也

空空如也

1 2 3 4 5 6
收藏数 111
精华内容 44
关键字:

c语言注释方式有两种

c语言 订阅