許功蓋問題可參考下列網址:
許功蓋問題

若是在LINUX使用BIG5碼,若用中文撰寫程式註解,
在編譯程式時,編譯器有可能將中文字的第二碼為5C(\)的字元,

當作跳脫字元而忽略下一行的程式碼。
造成看不見的BUG,明明有寫程式,卻不執行程式碼。
但是若在中文註解後面加上//或用英文做結尾,則可以改善此結果。

以下是判斷有 第二碼為5C(\)的字元在句尾時,加上//當結尾,以躲過許功蓋問題。   
 

 
++++++++++++++++++++++++++++++++++

#include
#include

using namespace std;

int main(int argc,char* argv[])
{
    
    if( argc     {
        cout        return -1;
    }

    string strFileContain;

    fstream fstreamFileIn;
    fstream fstreamFileOut;

    char*   pszFileName    = argv[1];
    string  strFileNameOut = pszFileName;
    strFileNameOut += ".new";

    fstreamFileIn.open(pszFileName);
    if ( false == fstreamFileIn.is_open())
    {
        cout        return -1;     
    }
    fstreamFileOut.open(strFileNameOut.c_str(),ios_base::in | ios_base::out| ios_base::trunc);
    if ( false ==fstreamFileOut.is_open())
    {
        cout        return -1;     
    }
    //printf("\\==[%x]\n",'\\');
    while( false ==   fstreamFileIn.eof()  )
    {
        //getline(fstreamFileIn,strFileContain);
        fstreamFileIn>>strFileContain;    
        if(true ==   fstreamFileIn.eof() )
        {   
            break;
        }
        //cout        long lEndString = strFileContain.size()-1;
        //cout        //printf("strFileContain[lEndString]=[%x]\n =========================\n ",strFileContain[lEndString]);

        ////////////////////////
        for(int i =0;i        {
           // printf("strFileContain[%d]=[%x]\n",i,strFileContain[i]);
            
        }
        //cout        ////////////////////////

        if( '\\' ==  strFileContain[lEndString] )
        {
            strFileContain.append("//");            
        } 
        fstreamFileOut    }
    
    
    return 0;

}
 

undefined

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 rangerll 的頭像
    rangerll

    rangerll的部落格

    rangerll 發表在 痞客邦 留言(0) 人氣()