2016-08-23 74 views
1

我帶參數運行-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1indent,全部是除了兩個障礙好:縮進爲奇數 - 修復或選擇其他

1)它傾向於把多餘的空格*後之類的語句mytype_t * my;,即

void my_function(my_type *ptr) 

變成

void my_function(my_type * ptr) 

2)它把額外的空間後在表達式符號等(uint16_t *) & q->drops

stats->drops = (uint16_t *) &q->drops 

變成

stats->drops = (uint16_t *) & q->drops 

運行indent-nss或不-ss沒有解決的問題。

有沒有辦法告訴indent不要這樣做?如果不是,indent有什麼替代方案?

謝謝。

SOLUTION

% indent -T my_type -T uint16_t 
+0

我不明白的第二種情況。那裏是缺少的東西? –

+0

旁註:8個字符的縮進不是一個好主意。典型值是2到4個空格(最常見的是4個)。 8個空格會使代碼實際上不易讀。 – Olaf

+0

'(uint16_t *)& - > drops'無論如何都是無效的語法。 – Olaf

回答

1

man indent

必須使用'-T'選項告訴縮進都在你的程序中 typenames由定義的typedef的名稱。 '-T'可以多次指定 ,並使用指定的所有名稱。對於 例如,如果你的程序中包含

typedef unsigned long CODE_ADDR;
typedef enum {red, blue, green} COLOR;

你會使用的選項-T CODE_ADDR -T COLOR

所以好像indent不知道的stdint.h類型的,所以你必須讓它知道你使用的是他們通過傳遞-T uint16_t -T mytype_t

+0

謝謝,它似乎解決了第一個問題(my_type * ptr),但不是第二個(&後面的額外空間)。 – Mark

+1

看起來它正在考慮'&'是一個按位與。我不知道我們怎麼能說服它不是...你真的做過'-T uint16_t'讓它知道它是一個類型轉換嗎? –

+0

哦,它實際上工作,我錯誤地通過「-T uint32_t」。謝謝。 – Mark

2

經過一番搜索,我找不到刪除的類型和指針之間的空間的選項。奇怪的是,只有當該類型以_t結尾時纔會發生。所以,這可能不會回答你的問題。但是indent的一個很好的選擇是astyle。對於你正在尋找的風格,你可以使用這些標誌:

astyle --style=kr --indent=tab 

我真的希望這有助於。