Emacs 24.2 for Windows。預處理器宏Emacs C模式自動縮進失敗
case TYPE_LONG:
{ <------- 65383
traceCodePath(20);
tempLongVal = iterator_long(it);
tempLongVal = 10;
if (isBigEndian())
{
swap_endian64(&tempLongValCon, &tempLongVal);
traceCodePath(25); <------- 65601
if (i > 0)
{ <------ get weird from here /* ((substatement-open 65601)) */
} <------ this line aligns with the { below "case" /* ((block-close 65383)) */
} <------ the code afterward all align with { below "case" /* ((block-close 65383)) */
C型壓痕行之有效從一開始,直到我加入了一些預處理宏,#ifdef來,#else僞,#結束,在這之後,在代碼中的一些點,隨後全都壓痕會導致混亂。 每一行的合成符號都是正確的,但是錨位置都是錯誤的,看起來他們不能識別{在他們的同一層次上,但是錨定到某個{在他們之前的上層。更奇怪的是,即使我再次刪除那些預處理器宏,縮進也不會再次恢復。
更奇怪的是,有時後來,它無故恢復。我不知道什麼操作觸發了這一點,但最有可能的,我認爲是「保存」,「恢復緩衝區」等。
希望有人可以找出原因,提前致謝。
我今天收到風滾草徽章。對我來說很諷刺...更新我自己:很容易重現這個錯誤,只需打開一個新緩衝區,然後切換到c模式,然後輸入以下代碼: 'code void main(void) { # ifdef MACRO_A int i = 1; #else int i = 2; #ENDIF 如果(I> 0){ \t/*((子語句開75))*/ }/*((defun定義閉17))*/ }' – Carthage 2013-03-07 09:53:42
在評論你的示例代碼工作正常對我來說,但我沒有在GNU模式下設置縮進,就像你一樣。不過,我會在預處理宏組合中遇到奇怪的縮進問題。我相信我和打開大括號有關,如果預處理器宏被視爲空行(他們是),我的語法確實是錯誤的。另一個惱人的效果是去功能的開始/結束的功能不起作用。 – Gauthier 2013-03-27 08:58:21
哦:對我來說很好,除了評論((子列表...),它出現在第0列。 – Gauthier 2013-03-27 09:00:53