我最近遇到过这几次。我无法隔离导致它的原因,但是如果有一条带有cout
语句的行,就会发生这种情况。当然并不总是,它有点罕见,但当它确实发生时,它是由一条以cout
开头的线引起的。
它的工作方式如下:在“错误的”cout
行之后,Xcode会自动将代码缩进一到两个级别。每次按下回车键开始在新行上书写时,代码将不必要地缩进。代码本身没有任何问题,没有语法错误或任何东西。只是一个简单的cout << someString << endl;
线。但是如果我摆脱那条线,或者将它评论出来,Xcode将使用适量的缩进,所以一切都恢复正常。如果我取消注释,以下行的缩进再次被搞砸。即使我删除了整段代码并重写它(如果在那里或某些东西中有一个时髦的隐形unicode),同样的事情也会发生。
最烦人的是,这不容易再现。我经常编写C ++代码,并且在完全不相关的上下文(不同的项目,不同类型的代码等)中只遇到过两三次。唯一常见的事情是,它始终是一个cout
声明,与以下行的缩进相混淆。
顺便说一句,我最近在我的Mac上安装了一个干净的OS X,并从Mac App Store下载了一个新的Xcode副本,所以我认为没有任何损坏或其他东西。
有没有其他人注意到这一点?我似乎无法在互联网上找到任何类似的东西。我应该联系Apple了吗?
编辑(2015. 11. 29.):
OS X 10.11.1上的Xcode 7.1.1中仍然存在这个问题。这是一张图片:
正如您所看到的,cout
线后面的线条的缩进是混乱的。即使我选择了整段代码并选择“Re-Indent”,Xcode也无法修复它。事实上,即使我手动修复它,“重新缩进”选项也会将其恢复为这种混乱的状态。而且,在不同版本的Xcode中,在不同时间创建的完全不同的项目中都会发生这种情况。我已经重新安装了OS X(干净利落!)因为我最初发布了这个问题,事情没有改变。这就是为什么我确定它是Xcode本身的某种错误。
我可以确认Xcode版本9.3(9E145)中仍存在此错误。请考虑以下测试代码段:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
class Date
{
private:
int Day;
int Month;
int Year;
string DateInString;
public:
Date(int InputDay, int InputMonth, int InputYear):
Day (InputDay), Month (InputMonth), Year (InputYear) {};
operator const char*()
{
ostringstream formattedDate;
formattedDate << Day << " / " << Month << " / " << Year;
DateInString = formattedDate.str();
return DateInString.c_str();
}
};
int main()
{
Date Holiday (25, 12, 2011);
cout << "Holiday is on: " << Holiday << endl;
return 0;
}
formattedDate << Day << " / " << Month << " / " << Year;
导致错误的缩进。当注释掉时,Xcode可以正确地重新缩进代码。