這篇部落格,我將整理關於注釋轉換的知識,首先,得知道,注釋轉換包括,c語言注釋轉
換成c++注釋,和c++注釋轉換成c語言注釋。
c語言注釋的風格:/*這是c語言注釋*/
c++語言注釋風格://這是c++注釋風格
下面,我主要分析將所有的注釋轉換成c++注釋,即就是
c語言注釋轉
換成c++注釋。
這樣的轉換會存在以下多種情況:
1.一般情況:/* int i = 0;*/轉換後就是//int i = 0;
2.換行問題:
/* int i = 0; */int j = 0;
/* int i = 0; */
int j = 0;
3.匹配問題:
/*int i = 0;/****xx*/轉換後就是//int i = 0;/****xx
4.多行注釋問題:
/*int i=0;
int j = 0;
int k = 0;
*/int k = 0;
轉換後就是:
//
//int i = 0;
//int j = 0;
//int k = 0;
//int k = 0;
5.連續注釋問題:
/**//**/
轉換後就是:// //
6.連續的**/問題:
/***/
轉換後就是://*
7.c++注釋問題:
// /**************/
轉換後還是// /**************/
8.字串裡的注釋:
"/*helloyaoyao*/"
轉換後還是:"/*helloyaoyao*/"
由於情況比較大,所以,我們運用乙個叫做有限狀態機的東西~~
我們主要的工作是將input.c裡的內容通過注釋轉換寫進output.c裡。
有限狀態機:
有限狀態機fsm是軟體上常用的一種處理⽅法,它把複雜的控制邏輯分解成有限個穩定
狀態,在每個狀態上進行處理。
有限狀態機是閉環系統,可以用有限的狀態,處理無窮
的事務。
關於c注釋到c++注釋的狀態轉換圖如下:
c狀態是不會到結束狀態的。
下邊來看原始碼(便於讀者理解,所以**中寫的注釋可能比較通俗易懂一點,也不是特
別專業):
#define _crt_secure_no_warnings 1
#include"commentconvert.h"
int main()
pfwrite = fopen(outputname, "w");
if (null == pfwrite)
commentcovert(pfread, pfwrite);
printf("注釋結束\n");
system("pause");
return 0;
}#ifndef __commentcovert_h__
#define __commentcovert_h__
#define inputname "input.c"
#define outputname "output.c"
#include#includeenum state
;void commentcovert(file *pfread, file *pfwrite);
void do_nul_state(file *pfread, file *pfwrite);
void do_c_state(file *pfread, file *pfwrite);
void do_cpp_state(file *pfread, file *pfwrite);
void do_str_state(file *pfread, file *pfwrite);
#endif//
#include"commentconvert.h"
enum state state = nul_state;
void commentcovert(file *pfread, file *pfwrite) }}
void do_nul_state(file *pfread, file *pfwrite)
else if (second == '*')
else
break;
case eof:
state = end_state;//如果遇到eof,進入結束狀態
break;
case '"':
fputc(first, pfwrite);
state = str_state;//如果遇到",進入字串狀態
break;
default:
fputc(first, pfwrite);//其他情況的字元,直接寫進去就行
break;
}}void do_str_state(file *pfread,file *pfwrite)
}void do_c_state(file *pfread, file *pfwrite)
else
}
else
break;
case '\n':
fputc(first, pfwrite);//如果需要回車,吧回車寫入,在寫入//,狀態不變。
fputc('/', pfwrite);
fputc('/', pfwrite);
break;
default:
fputc(first, pfwrite);
break; }}
void do_cpp_state(file *pfread, file *pfwrite)
else
break;
}}
加入**之後,竟然發現好醜~~~希望理解。
**的測試用例:
下邊我來談一下關於寫**時的一些失誤:
1.寫**之前,沒有將思路整理好,導致出錯了也不知道從哪開始除錯,排查。
2.對有限狀態轉移的不理解:比如c狀態下沒有遇到*/,遇到了其他一般字元,仍然需要
停留在c狀態;還有,狀態被改變之後,不用人為地呼叫commentconvert函式,因為進
入當前狀態是從commentconvert函式進入的,所以結束當前狀態後也會回到commentconvert函式,while迴圈幫我們實現了。也是因為多餘。。
3.state是乙個全域性變數,軟體工程課學到,盡量不要使用全域性變數,是因為它不安全,
想改就能改,根據他的這個特性,我們可以做到狀態轉換。但是,定義全域性變數,你也
不要得寸進尺----將全域性變數定義在標頭檔案中,這樣全域性變數在每個檔案中都可以被使
用,被改變,而我們只要在我們當前的檔案中使用。如果乙個工程不是乙個人完成,那
麼其他人的不留意也會改變它,所以,這樣就不好了。(反正意思就是這個了)
4.開啟檔案就關閉檔案,如果讀取開啟失敗,關閉檔案再報告錯誤;如果程式順利執行
之後,也要關閉檔案,粗心的我並沒有關閉,以下這兩句**:
fclose(pfread);
fclose(pfwrite);
應該新增在測試檔案的
commentconvert函式呼叫之後。
這是我在寫這個小專案過程中遇到的問題,希望讀者會注意~~當然,還有誰會像我這麼
笨,犯這樣的錯誤~~
C語言小專案 注釋轉換
這裡所說的注釋轉換是指將c風格的注釋轉換成c 風格的注釋。那麼我們如何來實現這個目的呢?首先我們得有乙個名為 input.c 的檔案 裡面寫著一段c風格的注釋和一些 而我們轉換後的注釋及 應該儲存在乙個名為 output.c 的檔案裡。要將 input.c中的內容轉換,我們就得將該檔案中的內容乙個乙...
小專案 注釋轉換
功能 將c注釋轉換為c 注釋 有普通 c cpp 結束四種狀態,各狀態轉換條件如下 status 定義列舉型別,表示四種狀態 include include convert.h enum sta status nulstat 將 狀態預製為普通狀態 void test nulstat file ip...
注釋轉換小專案(c注釋 到c 注釋)
首先歡迎閱讀本文,注釋轉換小專案涉及到c語言對檔案的操作,另外這個小專案還應該對各種情況都考慮到。將c語言注釋轉換為c 注釋 1.一般情況 int i 0 2.換行問題 int i 0 int j 0 int i 0 int j 0 3.匹配問題 int i 0 x 4.多行注釋 int i 0 i...