Я пишу этот крошечный пример на C++ в Eclipse 3.4.1 (CDT 5.0.1):
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
int foo()
{
std::vector<int> numbers;
BOOST_FOREACH(int n, numbers)
{
std::cout << n << std::endl;
}
std::cout << numbers.size << std::endl;
}
Затем я нажимаю Shift + Ctrl + F, чтобы отформатировать свой код, и он становится таким:
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
int foo()
{
std::vector<int> numbers;
BOOST_FOREACH(int n, numbers)
{ std::cout << n << std::endl;
}
std::cout << numbers.size << std::endl;
}
Это в стиле кода BSD / Allman. Другие стили, очевидно, изменяют внешний вид отформатированного кода, но ни один из них не дает правильного отступа.
Когда я использую функцию форматирования для более крупного фрагмента кода, на последующие функции или методы также влияет слишком маленький отступ, что делает помощь по форматированию бесполезной.
Могу ли я что-то сделать, чтобы отступы работали правильно с помощью BOOST_FOREACH?
Я так и не решил этого. Обратите внимание, что я не работал над этим проектом и в более поздних версиях Eclipse.
Можно ли сказать eclipse, что BOOST_FOREACH должен быть отформатирован как оператор while?
Жалко, что спустя 6 лет эта ошибка все еще не исправлена.





Эээ ... ты не можешь? Попробуйте следующую версию CDT ...: _ (
Согласен, комментарий удален. Должен был прочитать дальше, извиняюсь.
Странно, раньше это работало с CDT 4. Так что, если вам это действительно нужно, я предлагаю вам понизить версию CDT: - /
Вы можете попробовать плагин astyle eclipse. Кажется, это намного лучше, чем стиль отступа C++ по умолчанию eclipse.
Добавьте это в какой-нибудь заголовок, используемый вашим кодом:
#ifdef __CDT_PARSER__
#undef BOOST_FOREACH
#define BOOST_FOREACH(a, b) for(a; ; )
#endif
В зависимости от того, как ваш проект настроен для сборки (т.е. если настройки Eclipse фактически не передаются вашему компилятору), вы также можете установить это в «C / C++ General-> Paths and Symbols-> Symbols» в свойствах проекта. . Определите символ C++, от «BOOST_FOREACH (a, b)» до «for (a;;)», и разрешите ему переиндексировать.
Он все еще не работает в текущем CDT для Кеплера. Но в Eclipse Bugzilla есть ошибка (проверьте ее статус здесь). Со временем это будет исправлено :-)
Вы когда-нибудь это исправляли? Плагин Astyle уступает IMO, потому что он выстраивает аргументы функций слишком далеко вправо.