Я не помню стандарт, говорящий о максимальной длине для идентификаторов, поэтому в теории они могут быть long. В реальной жизни эти имена могут быть ограничены, по крайней мере, реализацией компилятора и компоновщика.Какова максимальная длина идентификатора C/C++ в общих (сборных) системах?
В то время как это должно работать на всех системах
int a;
этот фрагмент
#!/usr/bin/perl
print "int" . "b" x 2**16 . ";";
создает declarationen, что дает неопределенная ссылка на std::
нечто с ld
при компиляции/связывания (с использованием GCC/MinGW).
Так каковы пределы размера для идентификатора на разных системах?
Имейте в виду, что ограничения длины имени являются для * искореженных имен *. Я был избит много раз некоторыми раздражающими предупреждениями от MSVC, когда я писал функции шаблона и передавал им некоторый 'boost :: transform_iterator'. Извращенное имя экземпляра становится просто безумно длинным. –
@Alexandre: До сих пор у меня никогда не было этой проблемы. Единственная проблема, связанная с шаблонами, которые я помню, заключалась в том, что мне пришлось увеличить глубину шаблона в некоторых проектах, которые использовали метапрограммирование. – mbx
gcc не имеет такой проблемы (см. Ответ @Anders). Это только предупреждение, которое иногда случается с инструментами MS, когда искаженные имена превышают 2048 символов. Однако, как правило, он не играет хаос со своими сборками. –