Подтвердить что ты не робот

Ограничение длины строки источника

Какова максимальная длина исходной строки для всех компиляторов? Это изменилось в С++ 11? Если да, то какова была старая ценность?

Я задаю этот вопрос, потому что я делаю тяжелый препроцессор voodoo (к сожалению, шаблоны не будут его обрезать), и это имеет тенденцию очень быстро делать линии. Я хочу остаться в безопасности, поэтому мне не придется беспокоиться о возможности компилятора X на платформе Y, отклоняя мой код из-за слишком длинных строк.

4b9b3361

Ответ 1

С++ 2003, Приложение B, (информативный) Объемы реализации (извините, у меня нет С++ 2011)

2) Пределы могут ограничивать количества, которые включают в себя описанные ниже или другие. Число в скобках после каждого количества рекомендуется как минимум для этого количества. Однако эти величины только рекомендации и не определяют соответствия.

...

  • Символы в одной логической строке источника [65 536].

Вы не спрашивали об этом, но они могут быть полезны, а также:

  • Уровни вложенности выражений в скобках в полном выражении [256].
  • Идентификаторы макросов, определенные одновременно в одной единицы перевода [65 536].
  • Аргументы в одном вызове макроса [256].
  • Количество символов во внутреннем идентификаторе или имени макроса [1 024].
  • Идентификаторы макросов, определенные одновременно в одной единицы перевода [65 536].
  • Параметры в одном определении макроса [256].


Postscript: Стоит отметить, что такое "одна логическая строка источника". Логическая строка источника - это то, что у вас после:
  • Символы физического исходного файла сопоставляются с основным источником набор символов
  • триграф последовательности (2.3) заменены соответствующими односимвольными внутренними представлениями
  • Каждый экземпляр символа новой строки и непосредственно предшествующий символ обратной косой черты удаляется

Логическая строка источника - это то, что у вас до:

  • Исходный файл разбивается на токены предварительной обработки.
  • Выполняются предпроцессорные директивы и расширяются макро-вызовы.

[цитаты из С++ 2003, 2.1 Фазы перевода]

Итак, если проблема OP заключается в том, что макросы расширяются до разумной длины строки, мой ответ не имеет значения. Если проблема OP связана с тем, что его исходный код (после работы с \, \n) может быть слишком длинным, мой ответ стоит.