2013-02-15 66 views
0

我正在處理遺留的計算數據源代碼。printf的不需要的輸出

爲了調試幾個錯誤條件我已經在代碼

printf("What???!!!!....\n"); 

日誌保持在文件中添加以下printf和我正在尋找字符串「什麼??? !!!! ......」但絕不II發現了這個,因爲它的輸出快要到:

什麼?|!....

我已經浪費了很多時間,因爲這個你不需要的輸出。 有人可以幫我找出原因嗎?

回答

2

的輸出與三字符, 字符串

? !對應於|

檢查你的Makefile -trigraphs

確保有更明智的版畫現已上:-)

+1

感謝好友..我可以看到-trigraphs在make文件中。在添加印刷品時必須更小心:-) – Anshul 2013-02-15 06:27:24

0

三字母(3個字符序列)和有向圖(2個字符序列)在C下加入到幫助別人輸入一些字符是ISO 646字符集以外,並沒有鍵盤符合這一點。

下面是來自Diagraph and Trigraphs Wiki page一個段落指定它明確:

基本字符集的C語言編程的是 ASCII字符集,包括九個字的位於 的ISO 646外的一個子集不變的字符集。當使用的編碼(可能是鍵盤) 不支持這九個字符中的任何一個時,這可能會造成編寫源代碼的問題 。 ANSI C 委員會發明瞭trigraphs作爲使用 鍵盤輸入源代碼的方式,該鍵盤支持任何版本的ISO 646字符集。

打印這兩個問號,你能逃脫第二一個,或使用字符串連接:

printf("What??\?!!!!....\n"); 

printf("What??" "?!!!!....\n); 
1

在古時,鍵盤並不一定包括所有需要的字符編寫C程序。爲了讓沒有右鍵盤的用戶能夠編程,最早版本的C編譯器使用了trigraphs和digraphs,非常見的兩個或三個字符的組合,這些組合可以直接轉換爲可能不存在的鍵。下面是對C有向圖和三字母列表:

http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

??!在列表中,並轉換爲|在預處理器中。

解決此問題的一種方法是在我上面鏈接的文章中:用\分隔問號,或關閉字符串並在問號之間重新打開它。這可能是您最好的選擇,因爲您正在使用遺留代碼。

通常,您還可以使用編譯器開關禁用二元圖和三元圖。查閱您的文檔以瞭解這些詳細信