![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Iron Bug |
![]()
Сообщение
#21
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
enum { arrlen=15, }; в этом куске неявно определён НЕИМЕНОВАННЫЙ элемент. в хвосте, перед закрывающей скобкой, не должно быть запятой. иначе компилятор считает, что там ДВА элемента и при переборе констант он таки будет считать, что есть неименованный элемент, значение которого равно 16. по-моему, нет смысла юзать enum там, где можно обойтись define'ами (поверьте старому системному программисту) ![]() далее, ошибка в самой исходной программе в определении j: если ты сканируешь алфавитный диапазон, то смещение первой буквы будет j='a'; (это ASCII код 61h) а у тебя смещение фиг знает где и length[c-j] где-то явно вне границ диапзона length. да и сама строка ++length[c-j]; стоит не в том месте, где полагается - она плюсует количество слов на каждой букве. в общем, проверяй диапазоны и логику. |
|
|
Алексей1153 |
![]()
Сообщение
#22
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
ну, запятую я случайно оставил, да.
в этом куске неявно определён НЕИМЕНОВАННЫЙ элемент. в хвосте, перед закрывающей скобкой, не должно быть запятой. иначе компилятор считает, что там ДВА элемента и при переборе констант он таки будет считать, что есть неименованный элемент, значение которого равно 16 а доказательства ? И какие-то разве последствия будут ? Я не просто так спрашиваю, дело в том, что у меня довольно часто вот так запятая там стоит - по причине визуального выравнивания кода (ну это долгая и никому неинтересная история), однако никогда ошибок или проблем не было. Создаётся впечатление, что пустоту после запятой в енуме компилятор просто игнорирует. А перечислял я и маски, и инкрементные идешники. Никогда ничего не покривилось ) Ежели тут есть опасность, то перестану так делать |
|
|
Iron Bug |
![]()
Сообщение
#23
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
а доказательства ? И какие-то разве последствия будут ? это определение структуры языка. в enum можно пропускать символические константы (типа { one=1, ,three=3,,,six=6 }). последняя константа - не исключение. можешь проверить, у меня просто было достаточно опыта с такими глюками. потенциальные проблемы - в пропускании тегов посередине. если потом используются манипуляции с последовательной нумерацией. не смертельно, но найти сложно. хотя, может, не все компиляторы такое позволяют, но у меня точно была такая проблема однажды. Сообщение отредактировал Iron Bug - 31.1.2011, 19:50 |
|
|
Алексей1153 |
![]()
Сообщение
#24
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Iron Bug, так я же не спорю, что если в середине пропустить, будет лишний инкремент. Но вот с последней запятой - что страшного ? И даже не узнать, что там компилятор сделал дальше
![]() |
|
|
DEADHUNT |
![]()
Сообщение
#25
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
это определение структуры языка. в enum можно пропускать символические константы (типа { one=1, ,three=3,,,six=6 }). вообще-то так нельзя делать. ISO/IEC 9899(Programming Language C): Цитата enum-specifier:
enum identifieropt { enumerator-list } enum identifieropt { enumerator-list , } enum identifier enumerator-list: enumerator enumerator-list , enumerator enumerator: enumeration-constant enumeration-constant = constant-expression |
|
|
Алексей1153 |
![]()
Сообщение
#26
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Iron Bug |
![]()
Сообщение
#27
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
вообще-то так нельзя делать. ISO/IEC 9899(Programming Language C): а, наверное, это в плюсах. но я помню, что однажды был какой-то страшный гемор из-за этих запятых у меня в одном из проектов. деталей не помню, ибо проектов просто до чёрта. если вдруг вспомню или наткнусь в коде - сообщу. Сообщение отредактировал Iron Bug - 31.1.2011, 21:42 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#28
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
DEADHUNT, нет ли у тебя в закромах ссылки на текст стандарта? А то я как-то рылся по инету и пришёл к выводу, что это только за деньги, либо обрывки (кто, что выложил).
|
|
|
Rocky |
![]()
Сообщение
#29
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
У меня был где-то... если нужен поищу.. дай мыло скину )
|
|
|
DEADHUNT |
![]()
Сообщение
#30
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
а, наверное, это в плюсах. нету такого ни в C ни в C++. DEADHUNT, нет ли у тебя в закромах ссылки на текст стандарта? А то я как-то рылся по инету и пришёл к выводу, что это только за деньги, либо обрывки (кто, что выложил). официальные draft'ы: open-std.org (они бесплатные, далее стандартизируются и оф. стандарт платный) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 21.5.2025, 8:01 |