注释转换(C注释风格-C++注释风格)
2017-07-30 12:31
387 查看
注释一般来讲有分为两种:
一是单行注释:直接在该行需要注释的地方加上”//”就行
如:// int a=0;
int b=0; //定义一个变量
另外还有一种是多行同时注释(不能嵌套使用):
如:/*
int a,b;
int c,d;
*/
其中/* 和 */起限定范围的作用,该范围内的语句都会被注释掉,将不再起作用。
当然以上多行注释也是可以用来单行注释的
//int a,b;
//int c,d;
一般来讲我们习惯把‘//’这种注释叫作c++注释,
‘/* */’叫作c语言注释
接下来我们来试着用代码实现一下从c注释到c++注释的转换
图解:
代码实现
commentconvert.h文件
commentconvert.c文件
test.c文件
转换效果图
一是单行注释:直接在该行需要注释的地方加上”//”就行
如:// int a=0;
int b=0; //定义一个变量
另外还有一种是多行同时注释(不能嵌套使用):
如:/*
int a,b;
int c,d;
*/
其中/* 和 */起限定范围的作用,该范围内的语句都会被注释掉,将不再起作用。
当然以上多行注释也是可以用来单行注释的
//int a,b;
//int c,d;
一般来讲我们习惯把‘//’这种注释叫作c++注释,
‘/* */’叫作c语言注释
接下来我们来试着用代码实现一下从c注释到c++注释的转换
图解:
代码实现
commentconvert.h文件
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef __COMMENT_CONVERT_H__ #define __COMMENT_CONVERT_H__ #include <stdio.h> #include <stdlib.h> enum STATE { NUL_STATE,//无状态 C_STATE, //c状态 CPP_STATE,//c++状态 END_STATE //结束状态 }; void DoNulState(FILE *pfIn, FILE *pfOut, enum STATE *s); void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s); void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s); void DoComment(FILE *pfIn, FILE *pfOut); #endif //__COMMENT_CONVERT_H__
commentconvert.c文件
#define _CRT_SECURE_NO_WARNINGS 1 #include"commentconvert.h" void DoNulState(FILE*pfIn, FILE*pfOut, enum STATE* s) { int first = 0; first = fgetc(pfIn); switch (first) { case'/': { int second; second = fgetc(pfIn); switch (second) { case'*': fputc('/', pfOut); fputc('/', pfOut); *s = C_STATE; break; case'/': fputc(first, pfOut); fputc(second, pfOut); *s = CPP_STATE; break; default: fputc(first, pfOut); fputc(second, pfOut); break; } break; } case EOF: *s = END_STATE; break; default: fputc(first, pfOut); break; } } void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s) { int first = 0; first = fgetc(pfIn); switch (first) { case'\n': fputc(first, pfOut); fputc('/', pfOut); fputc('/', pfOut); break; case'*': { int second = fgetc(pfIn); switch (second) { case'/': { *s = NUL_STATE; int third = fgetc(pfIn); switch (third) { case'\n': fputc(third, pfOut); break; case'/': ungetc(third, pfIn); fputc('\n', pfOut); break; default: fputc('\n', pfOut); fputc(third, pfOut); } } break; case'*': fputc(second, pfOut); ungetc(second,pfIn); break; default: fputc(first, pfOut); fputc(second, pfOut); break; } break; } case EOF: *s = END_STATE; break; default: fputc(first, pfOut); break; } } void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s) { int first = 0; first = fgetc(pfIn); switch (first) { case'\n': fputc(first, pfOut); *s = NUL_STATE; break; case EOF: *s = END_STATE; break; default: fputc(first, pfOut); break; } } void DoComment(FILE*pfIn, FILE*pfOut, enum STATE* s) { 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; default: break; } } }
test.c文件
#define _CRT_SECURE_NO_WARNINGS 1 #include"commentconvert.h" void test() { FILE *pfIn = NULL; FILE *pfOut = NULL; pfIn = fopen("test.c1.txt", "r"); if (pfIn == NULL) { perror("open file for read."); exit(EXIT_FAILURE); } pfOut = fopen("test.c2.txt", "w"); if (pfOut == NULL) { perror("open file for write."); fclose(pfIn); exit(EXIT_FAILURE); } DoComment(pfIn, pfOut); fclose(pfIn); fclose(pfOut); } int main() { test(); system("pause"); return 0; }
转换效果图
相关文章推荐
- 注释转换(将C的注释风格转换为C++的)
- 注释转换(C注释转换为c++注释)
- xcode自定义编写插件----改变c++/c注释风格
- 注释转换 ——C++注释转换为标准C语言注释
- 注释风格转换(从C语言注释风格转换到C++注释风格)
- 条款4:尽量使用c++风格的注释
- Effective C++:条款4:尽量使用c++风格的注释
- 如何使GCC能够处理双斜线注释(C++风格注释)?
- 注释转换(c++注释到C注释)
- Effective C++条款4:尽量使用c++风格的注释
- 注释转换 ——C++注释转换为标准C语言注释
- c语言实现代码C风格到C++风格的注释转换
- C++风格_注释
- C注释风格转化为C++风格注释
- 改善C++ 程序的150个建议学习之建议22:灵活地使用不同风格的注释
- 条款3,4:尽量用new和delete而不用malloc和free 尽量使用c++风格的注释
- C语言小项目—注释转换( C注释转换为C++注释 )
- 注释转换(c++风格转c风格)
- 条款4:尽量使用c++风格的注释
- 注视转换 将C风格注释转换为C++风格