【发布时间】:2013-02-27 05:05:06
【问题描述】:
Emacs 24.2 for Windows。
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, #end,然后,从代码中的某个点开始,所有之后的缩进都变得混乱。 每一行的句法符号都是对的,但是锚的位置都错了,好像不能识别同级的{,而是锚定在上一级前面的某个{。
更奇怪的是,即使我再次删除了那些预处理器宏,缩进也不会再次恢复。
更奇怪的是,有时后来,它无缘无故地恢复了。我不知道是什么操作触发了这个,但我认为最有可能的是“保存”“恢复缓冲区”等。
希望有人能找出原因,提前谢谢。
【问题讨论】:
-
我今天收到了一个风滚草徽章。这对我来说很讽刺......更新我自己:很容易重现这个错误,只需打开一个新的缓冲区,然后切换到c-mode,然后输入以下代码:
code void main(void) { #ifdef MACRO_A int i = 1; #else int i = 2; #endif if (i > 0) { /* ((substatement-open 75)) */ } /* ((defun-close 17)) */ } -
您在评论中的示例代码对我来说很好,但我没有像您那样在 GNU 模式下设置缩进。不过,结合预处理器宏,我确实遇到了奇怪的缩进问题。我相信我的与打开大括号有关,如果预处理器宏被视为空行(它们是),我的语法确实是错误的。另一个恼人的效果是,去那个函数的开始/结束的函数不起作用。
-
哦:对我来说很好,除了注释((子语句...,它出现在第 0 列。
-
我用24.3测试,问题依旧。
标签: emacs preprocessor indentation c-mode