許功蓋問題可參考下列網址:
許功蓋問題
若是在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;
}
- Mar 23 Fri 2012 11:16
2012/03/23 【C++,偵測許功蓋問題】
全站熱搜
留言列表
發表留言