2016-08-03 79 views
0

我在嘗試改進this C code的縮進。對於用於縮進的確切規則,我並不挑剔,我只是在乎它看起來像是多少標準的東西!C代碼縮進的練習

有趣的是,我的瀏覽器上的代碼看起來不錯,但一旦下載,顯然縮進是由「tabs」和「spaces」混合引起的,它在SublimeText2和TextWrangler上看起來都很醜。

我試圖

indent file.c 

但它返回一個長的一系列錯誤的認爲似乎與存在counterslash其次是換行符(「\\ n」或「\\\ N」如果斜線必須在字符串內跳過)。所以我試圖刪除那些與

tr "\\\n" " " <file.c> newfile.c 

但我沒有達到我的目標。

+0

'看起來很醜陋'將你的編輯器設置爲使用標籤大小爲'8'的文件,它會更好看。 – dxiv

回答

2

當我下載文件時,它具有CRLF(DOS或Windows風格)行尾。當你通過Unix indent運行它時,它不喜歡用反斜槓跟隨CR而不是NL(又名LF)。如果您更換CRLF行尾,則應該按照indent的格式設置。

問題是indent希望反斜槓後面跟着換行符,但CR不是換行符。

如果您有dos2unixdtou命令,請使用該命令。如果沒有,用tr

tr -d '\015' <sfs_code.c> x31; mv x31 sfs_code.c 

您也可以通過8個空格代替製表符改善的事情。此外,可能有其他工具,可以做的工作,但經典的工具是pr:一個分裂的字符串多行

pr -e8 -l1 -t sfs_code.c > x31; mv x31 sfs_code.c 

反斜槓換行符序列是非常20世紀80年代風格的編碼。由於C89/C90標準引入了字符串連接,因此它不是必需的(儘管它仍被認爲是合法的C)。

在6781行,這是一個非常大的文件。它包含許多其他源文件(.c擴展名)和一些標題。我用uncrustify戳了一下,它沒有問題;刪除CR字符後,indent也很好。

(我用我自己的ule - 統一行尾 - 程序進行轉換這是一個很大的不同可能的技術之一。)

請注意,您tr命令失敗,因爲它映射都反斜槓和換行符空白(並保持CR字符不變),這不是你想要的。 tr命令映射單個字符;根據需要映射字符組合是不合適的。

+0

現在好多了!謝謝+1 –