最近剛開(kāi)始學(xué)習(xí)c++,接觸了一個(gè)小項(xiàng)目,寫(xiě)一個(gè)程序?qū)語(yǔ)言的注釋轉(zhuǎn)化為c++的注釋,這個(gè)里面也要分很多種情況,下面我就把我做的小程序分享出來(lái),
成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來(lái)公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過(guò)去的10多年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如成都木制涼亭等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過(guò)硬的技術(shù)實(shí)力獲得客戶的一致稱譽(yù)。
在把C語(yǔ)言注釋轉(zhuǎn)化為c++注釋的過(guò)程中,列舉了以下幾種情況
1.普通情況
/*int i = 0;
2.換行問(wèn)題
/*int i = 0;*/int j = 0; /*int i = 0;*/ int j = 0;
3.匹配問(wèn)題
/*int i = 0;/*xxxxx*/
4.多行注釋
/*int i = 0; int j = 0; int k = 0; */int k = 0;
5.連續(xù)注釋
/**//**/
6.連續(xù)的**/問(wèn)題
/***/
7.c++注釋問(wèn)題
// /*xxxxxxxxxxx*/
下面就分情況處理一下這幾種情況 首先,你要成功創(chuàng)建一個(gè)文件并能夠把C語(yǔ)言的注釋寫(xiě)進(jìn)去
void AnnotationConvert(const char* inputFile, const char* outputFile) { FILE* fIn = fopen(inputFile, "r");//用只讀的方式打開(kāi)一個(gè)文件 //檢測(cè)文件是否打開(kāi)成功,并輸出錯(cuò)誤碼 //只讀方式打開(kāi)文件失敗,有可能是文件不存在或路徑錯(cuò)誤等問(wèn)題 if (fIn == NULL) { printf("打開(kāi)文件%s失敗,errno:%d", inputFile,errno); return; } //寫(xiě)方式打開(kāi)文件失敗,這是要注意關(guān)閉已打開(kāi)的fIn,否則可能導(dǎo)致內(nèi)存泄漏等問(wèn)題 FILE* fOut = fopen(outputFile, "w"); if (fOut == NULL) { fclose(fIn);//關(guān)閉文件流 printf("打開(kāi)文件%s失敗,errno:%d", outputFile,errno); return; } Convert(fIn, fOut); //打開(kāi)文件成功,要注意關(guān)閉文件流 fclose(fIn); fclose(fOut); } 在這里,可以定義兩個(gè)枚舉常量用來(lái)判斷是c語(yǔ)言注釋的開(kāi)始還是結(jié)束 typedef enum State { C_BEGIN, C_END, }State; void Convert(FILE* fIn, FILE*fOut) { //斷言文件流 assert(fIn); assert(fOut); char first, second;//讀取兩個(gè)字符 State tag = C_END; do { first = fgetc(fIn); switch (first) { //1.普通情況 /*int i = 0;*/ case'/': second = fgetc(fIn); if (second == '*')//當(dāng)讀取的第一個(gè)字符為/第二個(gè)字符為*時(shí) { //3.匹配問(wèn)題/*int i = 0;/*xxxxx*/ if (tag == C_END)//判斷是否上一個(gè)C語(yǔ)言注釋已結(jié)束,即一個(gè)C語(yǔ)言注釋的開(kāi)始, //若是,轉(zhuǎn)化為c++注釋的開(kāi)始 { fputc('/', fOut); fputc('/', fOut); tag = C_BEGIN; } else //若不是,按原樣輸出 { fputc('/', fOut); fputc('*', fOut); } } //7.c++注釋問(wèn)題 // /*xxxxxxxxxxx*/ else if (second == '/') //當(dāng)讀取的第一個(gè)字符為/且第二個(gè)字符也為/ { fputc('/', fOut); //按原樣輸出 fputc('/', fOut); char next; do { next = fgetc(fIn); //讀取第三個(gè)字符并輸出它 fputc(next, fOut); } while (next != '\n' && next != EOF); } else { fputc(first, fOut); fputc(second, fOut); } break; case'*': second = fgetc(fIn); if (second == '/') //當(dāng)?shù)谝粋€(gè)字符為*第二個(gè)字符為/時(shí)輸出一個(gè)換行 { char next = fgetc(fIn); //5.多行注釋 /**//**/ fputc('\n', fOut); if (next == '/') //當(dāng)讀取的第三個(gè)字符也為/時(shí),倒退讀取一個(gè)字符判斷是否為多行注釋的問(wèn)題 { fseek(fIn, -1, SEEK_CUR);//倒退讀取 } //2.換行問(wèn)題/*int i = 0;*/intj = 0; else if (next != '\n'&& next != EOF) //當(dāng)讀取的第三個(gè)字符不為換行不是/且不是文件結(jié)束的標(biāo)志時(shí),輸出第三個(gè)字符 { fputc(next, fOut); } else { fputc('\n', fOut); } tag = C_END; //C語(yǔ)言注釋的結(jié)尾,將用作標(biāo)志的枚舉常量置為end } //6.連續(xù)的**/問(wèn)題 /***/ else if (second == '*') //當(dāng)讀取的第二個(gè)字符為*時(shí),輸出第一個(gè)字符且倒退讀取一個(gè)字符 { fputc(first, fOut); fseek(fIn, -1, SEEK_CUR); } else { fputc(first, fOut); fputc(second, fOut); } break; case'\n': // 4.多行注釋 /*int i = 0; int j = 0; int k = 0; */int k = 0; //當(dāng)讀取到的第一個(gè)字符為換行時(shí)首先輸出一個(gè)換行 fputc('\n', fOut); if (tag == C_BEGIN) //判斷是否為一個(gè)C語(yǔ)言注釋的開(kāi)始,若是,進(jìn)行轉(zhuǎn)化 { fputc('/', fOut); fputc('/', fOut); } break; default: fputc(first, fOut); break; } }while (first != EOF); //讀取到的字符不是文件結(jié)束 }
這樣子一個(gè)注釋轉(zhuǎn)換的小項(xiàng)目就基本完成了
當(dāng)前標(biāo)題:c語(yǔ)言走向c++的第一步,注釋轉(zhuǎn)換
URL鏈接:http://www.rwnh.cn/article2/pcogoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、定制網(wǎng)站、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)公司、云服務(wù)器、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)