Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Вчера я решил заняться чем-нибудь интересным. Решил разобрать код автора august, созданный в 1985 году для IOCCC. Ниже привожу код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 0.1 Когда я стал его разбирать (на листочке конечно-же), мне стало понять почему мне говорили про кучу define, когда я спрашивал про то, как можно написать работу с длинными числами за 200 символов. Вероятно, написать и правда можно(если обладать фантазией с немалым коэффициентом извращённости). 0.2 Разобрал 2 строки после списка макрозамен, и решил что не серьёзно изучать Си, и не написать для этого программу (тем более, в дальнейшем её можно будет использовать для парсера языка). 1. Я решил, что сначала мне нужно получить список всех замен (как бы это слово правильно назвать, макроподстановок? ) в тексте. Написал для этого алгоритм. Подскажите пожалуйста, верен ли он ? Или я что-то/много что упустил. 2. Вероятно, лучше всего хранить список макрозамен в массиве структур. И ещё должна быть переменная, в которой хранится количество записей. Глобальная переменная. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Хотя в этом я не уверен. Правильно ли я думаю ? 3. Согласно стандарту может быть максимум 4095 разных макроидентификаторов? ISO/IEC 9899:201x4095 macro identifiers simultaneously defined in one preprocessing translation unit 4. Можно ли посмотреть код, полученный после работы препроцессора VS ? Модератор: Вложение удалено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 03:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Рисунок просто огромный, прошу прощение. Я загружу новый. Удалите пожалуйста старый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 03:49 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury4. Можно ли посмотреть код, полученный после работы препроцессора VS ? http://stackoverflow.com/questions/277258/c-c-source-file-after-preprocessing Вам пора научиться гуглить ЗЫ. Остальное мне не интересно, поэтому не комментирую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 03:54 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВам пора научиться гуглить Да хотя бы открыть для себя ключи /?, -h, --help (в зависимости от компилятора)... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 11:27 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Алгоритм не совсем верный, он не распознает функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 13:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Сашок. У некоторых компилляторов есть опции которые показывают результат макро-процессинга. Воспользуйся им. Потом отформатируй нормально исходник и мы с удовольствием на него посмотрим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 16:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Следующий шаг - изучить что такое CFG и bison. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 18:07 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton, спасибо :) воспользовался ещё вчера, но у меня есть чувство, что навряд-ли вы посмотрите на этот код с удовольствием. Хотя мне он кажется интересным. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. Anatoly Moskovsky, я не догадался сделать запрос на английском. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 07:24 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Саш. Это всё замечательно. А каково назначение этого алгоритма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 14:30 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Который я рисовал выше ? Xочу для начала написать слабую версию препроцессора, и алгоритм выше собирает все макроподстановки в файле. Но он не до конца верный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 14:34 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Или алгоритма из конкурса запутанного кода ? Это я не знаю, хочется разобраться. Мне уже пора, до свидание всем. Если у кого-нибудь будут интересные мысли по коду, то пишите :) PS Всё-же удивляюсь, почему так мало кому интересен этот конкурс. Он наверное вам кажется слишком детским, и не серьёзным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 15:32 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саш я на правах обычного мембера выскажу своё мнение что часть твоих постов - бесполезны для форума. И я тебя как мембер прошу фильтровать посты по степени их полезности. Желаю успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 15:53 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryXочу для начала написать слабую версию препроцессора, и алгоритм выше собирает все макроподстановки в файле. Но он не до конца верный Нужно еще учесть что макроподстановки рекурсивные. SashaMercuryВсё-же удивляюсь, почему так мало кому интересен этот конкурс. Он наверное вам кажется слишком детским, и не серьёзным Разбираться в чужом коде - это работа за которую платят деньги :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 15:53 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonСаш я на правах обычного мембера выскажу своё мнение что часть твоих постов - бесполезны для форума. И я тебя как мембер прошу фильтровать посты по степени их полезности. Желаю успехов. Не согласен. Не нужно решать за остальных читателей, что им полезно, а что нет. Афтору спасибо за работу, остальные сами решат полезен код или нет, кнопку закрытия вкладки никто не отменял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 17:42 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercury, Сашок. У некоторых компилляторов есть опции которые показывают результат макро-процессинга. Воспользуйся им. Потом отформатируй нормально исходник и мы с удовольствием на него посмотрим. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 19:55 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Вчера я решил заняться чем-нибудь интересным. Решил разобрать код автора august, созданный в 1985 году для IOCCC. Ниже привожу код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Этот код -- пример того, как не надо использовать препроцессор. Я лично не понимаю, что тут интересного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 20:02 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
MasterZivЭтот код -- пример того, как не надо использовать препроцессор. Я лично не понимаю, что тут интересного. представь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 21:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропилпредставь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бодИ почём сейчас машина времени??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 21:32 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovИзопропилпредставь себе, что код нужно доставить в удалённую точку по телеграфному каналу со скоростью 110 бодИ почём сейчас машина времени??? ну так и код 1985 года. а вот на javascript пожатый это сильно издали смахивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 21:40 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Меня другой вопрос волнует. SashaMercury, где обещанный декодер? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 02:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропилну так и код 1985 годаЕсли сейчас обсуждается код 1985 года в контексте 110 бод, то у кого-то появилась (завалялась) машина времени. Возникает закономерный вопрос: почём сейчас машина времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 09:39 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyМеня другой вопрос волнует. SashaMercury, где обещанный декодер? :) Здравствуйте. Прекрасно помню, и скоро (до конца года точно) реализую. С понедельника начну уже точно. Я делаю это долго, но поверьте мне я выполняю много посильной работы . Регулярно читаю стандарт, каждый день решаю более простые задачи. И ещё очень большой блок по математике,дифференциальные уравнения(параллельно изучению мной прекрасного языка Си). Также, постоянно читаю Кнута. Перед собой поставил более глобальную задачу, написать синтаксический анализатор языка Си(для меня она глобальная, для тех кого я тут знаю очевидно не такая уж глобальная). Но не хочу читать как это делать. Наверное нужно открыть книгу по теории языков программирования, но хочу пока дойти сам. Резюмируя: Я делаю это медленно, спасибо что подсказали, с понедельника начну более плотную работу именно над этим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 15:27 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
И улетал на полторы недели практически ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 15:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
надеюсь, что кому-то, разбор этого кода в итоге окажется интересным и полезным. Например разбор кода из 1 чемпионата мира по запутанному программному коду был интересен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 15:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly MoskovskyМеня другой вопрос волнует. SashaMercury, где обещанный декодер? :) Перед собой поставил более глобальную задачу, написать синтаксический анализатор языка Си Чето мне нехорошо стало... пойду накапаю себе капель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 15:42 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercuryпропущено... Перед собой поставил более глобальную задачу, написать синтаксический анализатор языка Си Чето мне нехорошо стало... пойду накапаю себе капель. А шо тут такого. Это ж не компилятор, а всего лишь парсер. Пишется за неделю, при условии что знаешь язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 16:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЭто ж не компилятор, а всего лишь парсер. Пишется за неделю, при условии что знаешь язык. Готовый YACC файл гуглится за минуту: http://www.quut.com/c/ANSI-C-grammar-y-2011.html Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 16:42 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Ну, чел же ясно сказал, что хочет придумать сам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2014, 17:07 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Вчера начала думать более плотно над задачей по частичной имитации работы препроцессора. Составил общий алгоритм. И мне кажется уже понял как это будет работать. Но я не уверен что правильно организовал структуру данных. Как вы считаете ? Как правильней назвать структуры ? Мне кажется названия не совсем корректные. Подскажите пожалуйста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 07:24 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Только названия неправильные. Есть object-like и function-like macro. Согласно стандарту. ISO/IEC 9899:201x 6.10.3 Macro replacement6.10.3 Macro replacement Constraints 1 Two replacement lists are identical if and only if the preprocessing tokens in both have the same number, ordering, spelling, and white-space separation, where all white-space separations are considered identical. 2 An identifier currently defined as an object-like macro shall not be redefined by another #define preprocessing directive unless the second definition is an object-like macro definition and the two replacement lists are identical. Likewise, an identifier currently defined as a function-like macro shall not be redefined by another #define preprocessing directive unless the second definition is a function-like macro definition that has the same number and spelling of parameters, and the two replacement lists are identical. 3 There shall be white-space between the identifier and the replacement list in the definition of an object-like macro. 4 If the identifier-list in the macro definition does not end with an ellipsis, the number of arguments (including those arguments consisting of no preprocessing tokens) in an invocation of a function-like macro shall equal the number of parameters in the macro definition. Otherwise, there shall be more arguments in the invocation than there are parameters in the macro definition (excluding the ...). There shall exist a ) preprocessing token that terminates the invocation. 5 The identifier _ _VA_ARGS_ _ shall occur only in the replacement-list of a function-like macro that uses the ellipsis notation in the parameters. 6 A parameter identifier in a function-like macro shall be uniquely declared within its scope. Semantics 7 The identifier immediately following the define is called the macro name. There is one name space for macro names. Any white-space characters preceding or following the replacement list of preprocessing tokens are not considered part of the replacement list for either form of macro. 8 If a # preprocessing token, followed by an identifier, occurs lexically at the point at which a preprocessing directive could begin, the identifier is not subject to macro replacement. 9 A preprocessing directive of the form Код: plaintext 1. defines an object-like macro that causes each subsequent instance of the macro name171) to be replaced by the replacement list of preprocessing tokens that constitute the remainder of the directive. The replacement list is then rescanned for more macro names as specified below. 10 A preprocessing directive of the form Код: plaintext 1. 2. 3. defines a function-like macro with parameters, whose use is similar syntactically to a function call. The parameters are specified by the optional list of identifiers, whose scope extends from their declaration in the identifier list until the new-line character that terminates the #define preprocessing directive. Each subsequent instance of the function-like macro name followed by a ( as the next preprocessing token introduces the sequence of preprocessing tokens that is replaced by the replacement list in the definition (an invocation of the macro). The replaced sequence of preprocessing tokens is terminated by the matching ) preprocessing token, skipping intervening matched pairs of left and right parenthesis preprocessing tokens. Within the sequence of preprocessing tokens making up an invocation of a function-like macro, new-line is considered a normal white-space character. The sequence of preprocessing tokens bounded by the outside-most matching parentheses forms the list of arguments for the function-like macro. The individual arguments within the list are separated by comma preprocessing tokens, but comma preprocessing tokens between matching inner parentheses do not separate arguments. If there are sequences of preprocessing tokens within the list of arguments that would otherwise act as preprocessing directives,172) the behavior is undefined. 12 If there is a ... in the identifier-list in the macro definition, then the trailing arguments, including any separating comma preprocessing tokens, are merged to form a single item: the variable arguments. The number of arguments so combined is such that, following merger, the number of arguments is one more than the number of parameters in the macro definition (excluding the ...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 07:30 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, # и ## будешь обрабатывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 08:08 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропил, пока что не буду. Сначала нужно сделать это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 08:14 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСоставил общий алгоритм возможную рекурсию учёл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 08:38 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
ИзопропилSashaMercuryСоставил общий алгоритм возможную рекурсию учёл? Да, буду проходить по тексту циклом до тех пор, пока количество замен за 1 проход не будет равно 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 08:41 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа, буду проходить по тексту циклом до тех пор, пока количество замен за 1 проход не будет равно 0 рискуешь никогда не остановиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 08:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
ИзопропилSashaMercuryДа, буду проходить по тексту циклом до тех пор, пока количество замен за 1 проход не будет равно 0 рискуешь никогда не остановиться тоже про это думал, но потом прочитал (позже найду где) что такое невозможно. хм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 08:51 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, в твоём алгоритме - возможно на косвенную рекурсию обрати внимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 09:05 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Для зацикливания достаточно написать: 1. заменить А на Б 2. заменить Б на А Предусматривай выход из такой ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 09:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Препроцессоры С обычно однопроходные... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 11:16 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа, буду проходить по тексту циклом до тех пор, пока количество замен за 1 проход не будет равно 0 Это неправильный подход. Вместо этого у вас должна быть функция, которая на входе получает идентификатор, а возвращает список токенов после подстановки макроса. И аналогично для function-like macro. И эти функции используются при токенизации текста перед парсингом. Это все естественно за один проход делается. Просто функции рекурсивные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 13:54 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Спасибо. А что вы можете сказать про предложенные структуры ? Я правильно их спроектировал, как вы считаете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 14:33 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСпасибо. А что вы можете сказать про предложенные структуры ? Я правильно их спроектировал, как вы считаете ? Ну можно и так. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 14:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Это самое важное сейчас. Спасибо. Завтра продолжу, у нас уже поздно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 15:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Надо только учесть, что в реальном проекте был бы не массив макросов, а хеш-таблица. Иначе не взлетит на больших исходниках, типа стандартных хедеров или winapi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 15:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, наличие elipsis ( ... ) в макроопределении имеет смысл в структуре отразить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 16:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Сашик. Я тебе тест придумал. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2014, 21:15 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonСашик. Я тебе тест придумал. Код: plaintext 1. 2. 3. 4. 5. 6. Вот как :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 04:32 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Не нашёл в стандарте, а разве нет ограничений на макроимена(если неправильно называю, то поправьте пожалуйста) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 04:37 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Имена макросов должны быть идентификаторами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 13:22 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Тестирую функцию формирования пространства макроопределения. Подскажите пожалуйста, где я ошибаюсь в работе с памятью ?(или в другом месте) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. далее Код: plaintext 1. 2. 3. 4. 5. 6. 7. и начало функции в которой возникает ошибка Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. и вот вызов функции Код: plaintext 1. 2. 3. 4. 5. 6. ошибка в функции add_macros. Диагностическое сообщениеавторUnhandled exception at 0x772BE753 (ntdll.dll) in preprocessing.exe: 0xC0000374: Куча была повреждена (parameters: 0x772F4270) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 04:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Пока не разобрался в чём проблема, читаю книги. Решил немного изменить структуру макроопределения Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Подскажите пожалуйста, выиграю ли я в памяти если укажу явное количество бит на поля с известными ограничениями ? Не потеряю ли я в скорости или в чём-либо другом ? Вы используете данный механизм в структурах ? Как правильно назвать тот факт, что я дважды попросил количество бит с запасом ? фраза "на всякий случай" мне не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 07:02 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Ой, достаточно 12 бит, +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 07:03 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саш структуры аллоцируют память кратную байтам, words, dwords. Забудь про биты вообще! Напиши просто работающий софт а потом будешь заниматься архивацией и уплотнением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 10:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonСаш структуры аллоцируют память кратную байтам, words, dwords. Забудь про биты вообще! Напиши просто работающий софт а потом будешь заниматься архивацией и уплотнением. Хорошо, к этому вопросу вернусь позже. Я догадывался что байтами, потому и спросил этот вопрос, ведь для чего-то этот механизм нужен, скорее всего для оптимизации по части памяти. Ладно, вернусь потом. Пока пытаюсь понять в чём ошибка в коде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 10:24 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Где это вы в С видели инлайн-инициализаторы полей структур? Их даже в С++ добавили только в С++11. Очевидно вы нам тут приводите код, который не соответствует тому что вы в реальности компилируете. Как не стыдно SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Соответственно исходя из выше сказанного, ms->m до первого вызова add_macros() содержит мусор. Вот и крэшится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 14:34 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Где это вы в С видели инлайн-инициализаторы полей структур? Их даже в С++ добавили только в С++11. Очевидно вы нам тут приводите код, который не соответствует тому что вы в реальности компилируете. Как не стыдно SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Соответственно исходя из выше сказанного, ms->m до первого вызова add_macros() содержит мусор. Вот и крэшится. Что такое инлайн-инициализаторы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 14:50 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто такое инлайн-инициализаторы ? Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:04 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто такое инлайн-инициализаторы ? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:04 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, уровень показа предупреждений при компиляции какой стоит? сколько предупреждений выдаёт компилятор после компиляции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Где это вы в С видели инлайн-инициализаторы полей структур? Их даже в С++ добавили только в С++11. Очевидно вы нам тут приводите код, который не соответствует тому что вы в реальности компилируете. Как не стыдно SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Соответственно исходя из выше сказанного, ms->m до первого вызова add_macros() содержит мусор. Вот и крэшится. Что такое инлайн-инициализаторы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:08 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorych, Он скорее всего по-прежнему как С++ компилирует. На это намекает этот каст, который не нужен в С: Код: plaintext 1. Но естественно инлайн-инициализаторы (правильное название in-class initializer, но по русски не звучит) работают даже в С++ только при вызове конструкторов, но никак не при malloc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Анатолий хотел сказать что указатели в структурах не принято инициализировать так как ты написал. Почему? Наверное есть аргументы.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:12 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercury, Анатолий хотел сказать что указатели в структурах не принято инициализировать так как ты написал.не то, чтобы не принято ))) просто запрещено ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:15 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercury, Анатолий хотел сказать что указатели в структурах не принято инициализировать так как ты написал. Почему? Наверное есть аргументы.. Нет, я хотел сказать что в С таких инициализаторов нет. Соответственно аргументы тут не требуются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:16 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyОн скорее всего по-прежнему как С++ компилирует.скилл выбирать правильный режим компилятора в математике не прокачивается ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:19 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorychскилл выбирать правильный режим компилятора в математике не прокачивается ;-)) Не будем о наболевшем ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:25 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Прошу всех обсуждать вопрос а не персону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
У меня интернет телефон раздаёт, потому дважды одно и то-же сообщение. Почему то думал что вы меня этому научили, Анатолий. В какой-то из тем. Я показал тут код, который компилировал, без обманов. Не могу сказать какой уровень предупреждений стоит, ибо на этом ноутбуке у меня ничего не установлено, кроме Maple. А другой далеко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:41 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
И найти топик не могу, в котором это было. Очень медленный трафик. А может быть я что-то путаю, вы меня учили чему-нибудь другому наверное, а я перепутал. Завтра найду ту тему в которой я впервые это применил. И почему применил. Меня гонят..Доброго времени суток :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему то думал что вы меня этому научили, Анатолий. В какой-то из тем. Я к сожалению не обладаю возможностью учить других тому, чего я сам не знаю. Было бы неплохо уметь такое SashaMercuryЯ показал тут код, который компилировал, без обманов. Ну, то была моя первая мысль. А вторая, альтернативная, что компилируется в режиме С++. Это конечно более вероятно. Поэтому прежде чем продолжать изучать С, возьмите и таки разберитесь, как компилировать программу как С, а не как С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2014, 15:53 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Искать не буду откуда я это взял, это и не важно. Маловероятно что это вы мне посоветовали. По-моему было так, я выделял память в описании структуры данных, вы мне сказали что так нельзя делать в Си, и я исправил , и стал писать =NULL, хотя это неправильно. Вы имели ввиду одно, а я понял неправильно. Хотя с другой стороны, испытываю некоторый дискомфорт когда вижу непроинициализированный указатель, особенно если потом я буду выделять к нему память. Буду продолжать работать, потерял полдня из-за этой глупой ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Не потерял конечно, но отвлёкся от алгоритма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:21 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Исправил Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Исправил, всё равно вылетает ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, А код где? Телепаты спят :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:34 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Вот мой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 03:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВот мой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. Ну, и кто будет ms->m инициализировать? Там по-прежнему мусор :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 04:19 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryВот мой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. Ну, и кто будет ms->m инициализировать? Там по-прежнему мусор :) Саша балда. Извините, глупая ошибка : ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 04:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
На ваш взгляд, такая функция имеет место быть в данной программе ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Сделал вывод: Для любой структуры данных (особенно если в ней присутствуют объекты на которые в дальнейшем планируется выделять память) нужно писать отдельный конструктор. Этот вывод правильный ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 08:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЭтот вывод правильный ?правильный, в целом, и ведёт он к отказу от С и переходу к С++ ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 09:27 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСделал вывод: Для любой структуры данных (особенно если в ней присутствуют объекты на которые в дальнейшем планируется выделять память) нужно писать отдельный конструктор. Этот вывод правильный ? В одной из серий мульт-сериала Симпсоны, Нельсон бросает камень в белку. Белка убегает. Нельсон записывает в блокнотик вывод - "Белки не любят камни". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 12:43 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВчера я решил заняться чем-нибудь интересным http://cpip.sourceforge.net/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 14:13 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Хорошо что этот вывод правильный :) Изучения языка, подобно пониманию окружающего мира ребенком, потому даже такой вывод кажется большим. Часть программы написал около 5 часов назад, но мне не нравится эта функция, сначала переделаю а потом покажу :) Я нашёл отличную статью на выходные C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 14:45 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Кстати пришлось и мне решать подобного рода вопросы. http://rsdn.ru/forum/com/5693941 MSDN wrapper classes Так вот при генерации кода для *.idl была проблема поместить перед определениями интерфейсов все необходимые "нестандартные" определения структур, ... /UDT/. Так вот алгоритм находил в *.h Microsoft определение какого-либо "нестандартного" типа /не забываем о том, что automation выставляет свои правила использования типов данных .../ и если к примеру это было определение какой-либо структуры, то нужно было пройтись по определениям полей и если встречался "нестандартный" тип, то вытащить из *.h для него определение ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 16:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton"Белки не любят камни".что, в целом, недалеко от истины, тем не менее ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 17:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, обрати внимание на Код: plaintext 1. задай себе вопрос: для ms->m я выделил память, чтобы ее переаллоцировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 23:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковSashaMercury, обрати внимание на Код: plaintext 1. задай себе вопрос: для ms->m я выделил память, чтобы ее переаллоцировать? Нет, не выделял. А разве в спецификации realloc говорится о том, что нельзя реаллоцировать память, если память ещё не выделена, а указатель проинициализирован в NULL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 01:47 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Насколько я понял realloc перераспределяет память для блока, с новой длиной. Функция возвращает указатель на блок с новой длиной (поэтому адрес может не совпадать с тем, по которому происходит перераспределение памяти, потому присвоение обязательно, fe p=(T)realloc(p,size), нельзя просто realloc(p,size)). Исходя из того что я понимаю(и если я ничего не упустил в стандарте, сейчас проверю), достаточно того, чтобы указатель бы проинициализирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 01:52 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
ISO/IEC 9899:201x7.22.3.5 The realloc function Synopsis 1 #include <stdlib.h> void *realloc(void *ptr, size_t size); Description 2 The realloc function deallocates the old object pointed to by ptr and returns a pointer to a new object that has the size specified by size. The contents of the new object shall be the same as that of the old object prior to deallocation, up to the lesser of the new and old sizes. Any bytes in the new object beyond the size of the old object have indeterminate values. 3 Ifptr is a null pointer, the realloc function behaves like the malloc function for the specified size. Otherwise, if ptr does not match a pointer earlier returned by a memory management function, or if the space has been deallocated by a call to the free or realloc function, the behavior is undefined. If memory for the new object cannot be allocated, the old object is not deallocated and its value is unchanged. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 01:54 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Кстати, скорее всего malloc частный случай realloc, и такое в Си встречается, пока не решил как к этому отношусь, хорошо или плохо. С одной стороны нужно помнить больше функций, происходит дублирование, увеличение общего объёма кода (при подключении библиотек), а с другой стороны скорее всего плюсы какие-то есть, просто я их не вижу в силу своей малой грамотности в теории языков программирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 02:04 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что я ошибаюсь при работе с массивом указателей list_args. Первым делом Код: plaintext 1. Затем, добавлю в цикле аргументы, вот что происходит в цикле Код: plaintext 1. 2. 3. 4. 5. 6. 7. Подскажите пожалуйста, правильный ли порядок действий ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 03:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Вроде бы всё понимаю, у меня есть массив указателей, сначала нужно установить в NULL его голову, затем в цикле реаллоцировать в зависимости от текущего количества строк, новую реаллоцированную строку нужно установить в NULL, и следующим действием выделить на неё столько памяти, сколько нужно. Но где-то у меня ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 03:23 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Почему у вас выделенное ниже - разные выражения? Код: plaintext 1. После вызова realloc, cur->rep_list становится невалидным. И последующий вызов будет работать с мусором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 03:34 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
ааа..Не знаю почему я вообще так написал и не заметил, сейчас исправлю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 03:41 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо, заработало C : Ну как я мог такое не проверить.. Уже все варианты продумал, прочитал статью про realloc, думал что неправильно работаю с памятью, а ошибка оказалась обычной опечаткой из-за неудачного именования полей структуры, и моей невнимательности ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 03:45 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Вот такая функция получилась. 1 вариант. Она будет запускаться как только программа поиска встретит токен "#define" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. Конечно, часть функции касаемо записи в идентификаторы имени макроподстановки и её параметров лучше бы вынести в отдельную функцию, что я и пытался сделать, но неудачно. Если использовать такую подфункцию то ничего не происходит Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Подумаю почему. Ну и скорее всего придётся передать эту функцию с точки зрения логики, мне кажется я получаю нужные строки далеко не оптимально. Вы согласны ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 06:30 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Нет. Реализация плохая. А могу ли я считать по маске "%[a-zA-Z_]%[0-9]" в один массив ? Подумал, если встречаю токен "#define" то считывать сразу всю строку до '\n' и с ней уже работать. Пока что общий алгоритм поиска выглядит так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 09:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Основные моменты решил. У меня остался один вопрос, подскажите пожалуйста. У нас есть такой участок кода. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Допустим индикатор положения файла указывает на q, то есть в temp запишется q. Как будет проинициализирован next_char ?(между q и struct есть пробел) #define q struct b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 03:14 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
У меня постоянно инициализируется s, сколько бы пробелов не было между struct и q. А если выше я сделаю ungetc(' ',in), то всё хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 03:16 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Как я понял, первое считывание по маске даёт такой эффект (установка указателя в файле после всех пробелов), хотя по этому примеру из стандарта, я этого не ожидал. ISO/IEC 9899:201xEXAMPLE 2 The call: #include <stdio.h> Код: plaintext 1. 2. 3. with input: 56789 0123 56a72 will assign to i the value 56 and to x the value 789.0, will skip 0123, and will assign to name the sequence 56\0. The next character read from the input stream will be a. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 04:36 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
если сделать считывание по маске вот таким, то всё заработало. А почему так, я не понял. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 04:50 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Потому что я процент добавил в конце первой маски, и не заметил этого :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 04:52 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Как вы считаете, такая функция имеет право быть ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Подскажите пожалуйста, как бы вы её вызывали ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 06:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКак вы считаете, такая функция имеет право быть ? право конечно имеет, но зачем ей игнорируемый параметр и фиксированное возвращаемое значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 08:02 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Я хотел делать так: Код: plaintext 1. 2. но не получилось. Интуитивно догадываюсь почему, но чёткого обоснования для себя я не дал. пришлось возвращать char* и делать так Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 08:39 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИнтуитивно догадываюсь почему, но чёткого обоснования для себя я не дал. char** p; SashaMercury Код: plaintext 1. 2. а зачем параметр p нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:28 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропила зачем параметр p нужен? в принципе, он видимо избыточен. Сейчас исправлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Функция поиска макросов создана, и протестирована в первом приближении. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. , где Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. и Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. и ещё две функции, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Хотя я не пришёл к выводу, как лучше(быстрее и безопаснее), считать по строкам, и потом делать их разбор, либо делать так как сейчас сделано. а вот и точка входа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 09:44 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Поиск директив "#define" это лексический анализ, а дальнейший разбор строки макроопределения, это синтаксический анализ. Я так понял. Это правильно ? В целом функции не слишком поганые ? Или вы бы делали совершенно по-другому ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:05 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПоиск директив "#define" это лексический анализ, а дальнейший разбор строки макроопределения, это синтаксический анализ. Я так понял. Это правильно ? нет, кажется, если я правильно понял твою мысль. В целом, лексер -- это выделение лексем, парсер (синтаксический анализ) -- грамматик. Лексемы выделяются безусловно, грамматики -- с вариациями. Напр. в С это -- Код: plaintext 1. 2. 3. лексемы, потому что это не может быть ничем другим. Код: plaintext 1. уже элемент грамматики, это может быть Код: plaintext 1. 2. 3. 4. Что же касается препроцессора, кажется, он не включается в обычную архитектуру компилятора и выполняется отдельно, до него. Он конечно имеет свой собственный лексер и парсер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. Это я считаю форменное безобразие. надо писать Код: plaintext 1. Это С, это не паскаль какой-нибудь тебе... Ну и конечно, тут должен быть IF, ты не вычисляешь выражение, ты ветвишь поток управления. В С к тому же нет false/true. Традиционно. Что-то там добавляли в последних стандартах -- но настоящий с-шник написал бы Код: plaintext 1. И в итоге код должен быть Код: plaintext 1. 2. К тому же между '#' и директивой препроцессора (define в данном случае) могут быть (разрешены) пробелы. strcmp не покатит, по крайней мере в таком виде. Думаю, лучше всего всё же использовать регвыражения типа libPCRE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. А если strcmp(w1, "#define") , как думаешь, куда девается выделенная память ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Существует #undef, поэтому Код: plaintext 1. должен быть стеком, а не просто списком. Точнее, структура макроопределений должна быть стеком твоих вот этих массивов MacroSpace. И в каждой точке компиляции кода должен применяться один из элементов этого стека (top, head). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 10:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо. По поводу памяти, я неправ. Забыл освободить. По другим замечаниям, мне нужно подумать, прежде чем ответить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 12:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, скорее всего malloc частный случай realloc, и такое в Си встречается, пока не решил как к этому отношусь, хорошо или плохо. С одной стороны нужно помнить больше функций, происходит дублирование, увеличение общего объёма кода (при подключении библиотек), а с другой стороны скорее всего плюсы какие-то есть, просто я их не вижу в силу своей малой грамотности в теории языков программирования В сях как-раз мало дублирования функционала. Потому как язык создавался в помощь разработке ядра Unix. И по сути большинство API просто отражают kernel-API. А вот если-бы ты полез в библиотеки и фремворки C#/Java - там просто оторопь берёт от обилия одних и тех-же яиц в анфас и профиль. Одних XML-ных API существует дюжина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 18:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercury, Код: plaintext 1. Это я считаю форменное безобразие. надо писать Код: plaintext 1. Это С, это не паскаль какой-нибудь тебе... Ну и конечно, тут должен быть IF, ты не вычисляешь выражение, ты ветвишь поток управления. В С к тому же нет false/true. Традиционно. Что-то там добавляли в последних стандартах -- но настоящий с-шник написал бы Код: plaintext 1. И в итоге код должен быть Код: plaintext 1. 2. К тому же между '#' и директивой препроцессора (define в данном случае) могут быть (разрешены) пробелы. strcmp не покатит, по крайней мере в таком виде. Думаю, лучше всего всё же использовать регвыражения типа libPCRE. код исправил, в целом я согласен. Использование тернарного оператора не есть самое удачное решение в данном конкретном случае. Поиск исправлю в дальнейшем, сейчас не хочу отрывать от несколько другой задачи, нужно сделать все замены в файле. По поводу организации данных, вы правы. Сейчас исправлять не буду, в дальнейшем, возможно, я это учту. Опять таки, пока не хочу отвлекаться от основной задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 02:14 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
А вот если бы я для считывания данных использовал посимвольный анализ, а не fscanf (хотя fscanf тоже веротяно читает по символам), было бы быстрее/медленнее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 02:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, fscanf медленнее, чем посимвольное чтение, т.к. ему приходится еще разбирать строку формата при каждом вызове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 03:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, это значит, что если бы у вас были знания на уровне моих в области Си(дело в том, что возможно есть другие функции, наиболее оптимальные, или есть библиотека о которой я не знаю, и использование этих функций/библиотек должно быть тут, а не посимвольное fscanf и getc(in)), то вы бы реализовали аналогичный алгоритм формирующий пространство макроимён через посимвольный анализ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 04:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Я бы использовал готовый генератор лексических анализаторов вместо самописного лексера. Например flex. А алгоритм бы уже работал с лексемами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 04:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky, это значит, что если бы у вас были знания на уровне моих в области Си(дело в том, что возможно есть другие функции, наиболее оптимальные, или есть библиотека о которой я не знаю, и использование этих функций/библиотек должно быть тут, а не посимвольное fscanf и getc(in)), то вы бы реализовали аналогичный алгоритм формирующий пространство макроимён через посимвольный анализ ? как правило делают посимвольный ввод, потому что так гибче. если бы ты знал в деталях, как работает fscanf, ты бы тоже его не использовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 07:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryэто значит, что если бы у вас были знания на уровне моих в области Си(дело в том, что возможно есть другие функции, наиболее оптимальные, или есть библиотека о которой я не знаю, и использование этих функций/библиотек должно быть тут, а не посимвольное fscanf и getc(in)), то вы бы реализовали аналогичный алгоритм формирующий пространство макроимён через посимвольный анализ ? Вопрос-то как звучит? Наиболее оптимальные! По объёму кода - для данной задачи наверное fscanf хватит. Лаконично. По скорости.. надо попрофилировать. Дать тыщу исходников. Тогда наверное fgets, или getc будет быстрее. Но для него надо хорошенький Finite-State-Machine для разбора написать. И еще критерий можно придумать. Дуракоустойчивость. Возможность exploit-a. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 19:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton Наиболее оптимальные! режет глаз словосочетание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 23:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропилmayton Наиболее оптимальные! режет глаз словосочетание не издевайтесь :) Когда пишу, то порой не успеваю за своими мыслями, потому подгоняю себя, тем самым минимизирую время поиска подходящего слова, потому порой пишу неграмотно, или с опечатками. И я не Фёдор Михайлович Достоевский, чтобы изощряться, и не Бальмонт с его "Я изысканность русской медлительной речи ...". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 02:40 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Особенно когда много думаешь прежде чем написать, в голове совсем другие мысли, а не о том как не ошибиться в грамматике/орфографии. Главное передать суть, и ничего не забыть, увеличение риска появления ошибки не играет слишком большой роли на фоне основной задачи. Тем не менее, я считаю, что писать нужно грамотно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 02:44 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryграмматике/орфографии. с грамматикой/орфографией проблем нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 05:42 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Тогда что вас смутило ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 07:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТогда что вас смутило ? семантика. optimus - он уже наилучший Что касается данного обсуждения - важен критерий оптимальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 08:55 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Мудрое решение /другого и не ждал. Копия форума firebird/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2014, 18:33 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Владимир2012Мудрое решение /другого и не ждал. Копия форума firebird/ loop ( 1 ) { say( "Извеняюсь, извеняюсь, извеняюсь" ); } PS: Не обратил внимания, что появился topic "Про улучшение DLL". Думал просто все выбросили ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2014, 21:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Продолжил заниматься макроподстановками. Составил общий алгоритм, согласно которому производились бы замены в тексте программы. Как вы считаете, в первом приближении он верный ? Рекурсия подразумевается в пункте 2.3 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 04:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Нашёл ошибку, если w_c=="#" || w_c=="#define", то нужно перейти на новую строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 04:33 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сейчас написал функцию, пробегающую по всем идентификаторам исходного кода(за исключением строк, начинающихся с #, т.к. там никаких замен быть не может). Мне она не очень нравится. Подскажите пожалуйста, видите ли вы какие-нибудь явные недостатки/минусы ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Вот так вызываю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Хотя сразу вижу, можно вынести выделение памяти за функцию. Выделить память один раз, и не делать malloc кучу раз. Та проблема что встречалась ранее. Сейчас перепишу. (да, и верхних функциях, непонятно почему возвращаю -1, там ведь указатели. Ещё одна ошибка, слишком сконцентрировался на алгоритме) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. всё равно не нравятся ни код, ни алгоритм. сейчас ещё подумаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 03:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
нужно поменять местами проверку на # и на символы, ибо вероятность появления не # выше чем диапазона символов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 04:08 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryнужно поменять местами проверку на # и на символы, ибо вероятность появления не # выше чем диапазона символов. а вот тут, можно видеть противоречия с математикой, по части рассуждений, и построения алгоритма. При построение алгоритма, сначала обрабатываются частные случаи, а потом общий случай(чаще всего так). При описании алгоритма, на языке программирования, сначала лучше описать вилку для общего случая(если в каждой вилке предусмотрен переход в конец блока цикла, или выход из него), и в дальнейшем описывать ветки по уменьшению вероятности захода в неё. Это опять таки мои предположения, но скорее всего они верны. Если компилятор(например оптимизирующий) не проводит оценку самостоятельно (сам придумывает тесты, и делает оценку). Но это маловероятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 04:30 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПодскажите пожалуйста, видите ли вы какие-нибудь явные недостатки/минусы ? попытки преждевременной оптимизации. с принципиальными моментами бы сначала разобраться -макроопределение может быть многострочным -строки и комментарии не нуждаются в разборе - строка , начинающаяся с # тоже требует разбора (это элементарно stringification может быть) - новые идентификаторы могут появляться по ходу макроподстановки(конкатенация) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 11:03 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 12:10 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Нас с 1 курса универа учили делать "защиту" от дурака. На любой вводимый руками текст софт должен давать реакцию как минимум адекватную. Без BSOD-ов, segmentation fault, stackoverflow. На циклическую или авто-рекурсивную замену defines должна быть чёткая реакция с выводом сообщения об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 15:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonНа циклическую или авто-рекурсивную замену defines должна быть чёткая реакция с выводом сообщения об ошибке это не ошибка, в случае рекурсии подстановка согласно спецификациям прекращается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 16:10 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
А Сашик кодит свои реплейсменты согласно спецификациям или так... ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 16:15 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonНас с 1 курса универа учили делать "защиту" от дурака. На любой вводимый руками текст софт должен давать реакцию как минимум адекватную. Без BSOD-ов, segmentation fault, stackoverflow. На циклическую или авто-рекурсивную замену defines должна быть чёткая реакция с выводом сообщения об ошибке. Доброго времени суток. Алан Мэтисон Тьюринг, Proposals for ACE(1945)До некоторого момента лучше допустить наличие ошибок в программе, чем потратить на её разработку столько времени, сколько потребуется на устранение всех ошибок(сколько десятилетий на это потребуется?). Хотя к данному конкретному случаю, скорее всего вы правы больше. Сегодня думал об этом, если хотите, то я пришёл к выводу что мне больше нравится принцип ASSUME. Не знаю есть ли такой в науке информационные технологии, но думаю вы поняли что я имею ввиду. (хотя нравится не нравится, спи моя красавица) Сегодня вечером я исправлял небольшую часть замечаний от научного руководителя, и это только книги :(. Не могу пока более плотно заняться этой задачей. Но я её решаю, и знаю что решу её точно, пусть и в первом приближении, пусть и с принципом ASSUME. Меня уже гонят, я тут в темноте ели как цитату эту нашёл :D Доброго времени суток, всем спасибо за советы, всё запомнил C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 16:22 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Кто-ж тебя "гонит-то" всё время? Купи планшет штоль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 16:25 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Да у меня он есть, а я им не пользуюсь, где-то валяется. Когда покупал, думал буду каждый день с ним ходить везде :D попользовался месяц, и он мне надоел :) Здравствуйте. В первом приближении программу написал, но пока что показывать не буду, ибо мне она не нравится. Покажу её после рефакторинга. У меня возник вопрос. Подскажите пожалуйста, возможно ли написать функцию, которая будет принимать и файл и строку по одному параметру?Вот такой прототип fe Код: plaintext 1. 2. 3. 4. но чтобы её можно было вызывать следующим образом: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 07:10 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Как вариант: можно две написать, одну использовать как обертку второй Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 07:49 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Dima TКак вариант: можно две написать, одну использовать как обертку второй Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Спасибо. Можно, но тогда получится что мы дважды читаем символы, один раз из файла, а потом из строки. Хотелось бы этого избежать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 07:54 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryполучится что мы дважды читаем символы, один раз из файла, а потом из строки. Хотелось бы этого избежать Не избежать этого, программа работает только с данными в памяти, т.е. строкой в твоем случае, при работе с файлом сначала все-равно чтение из файла в память произойдет. Как бы ты не написал свою функцию. Если уж очень хочется одну, то можно два параметра: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. вызывать так Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 08:04 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
жаль что нельзя сделать по-другому. Хотя возможно это и правильно, что нельзя.(хотя у меня было такое чувство что должна быть изящная лазейка) Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 09:12 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
а можно передавать указатель на Тип, и в зависимости от типа, выполнять различные операции ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 09:12 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Dima T Код: plaintext 1. 2. В С нельзя таким образом перегружать функции. В С++ можно. SashaMercuryа можно передавать указатель на Тип, и в зависимости от типа, выполнять различные операции ? В С++ - поизвращаться типами можно. Но в целом идея дурацкая :) Данный класс проблем обычно (в любых языках) решается путем введения дополнительных абстракций. Например если одна и та же функция должна уметь читать и из памяти и из файла, то вводится абстракция Stream, у которой есть операции read_char()/read_line() etc. Функция работает с ней. А при вызове функции создается либо MemoryStream либо FileStream - разные реализации этой абстракции. В С это реализуется через структуры и указатели на функции. В С++ есть явный синтаксис абстракций - виртуальные функции и шаблоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 09:45 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, это интересно. Значит можно создать структуру Stream, в ней описать такие вещи как: признак конца файла, указатель на функцию чтения потока, тип потока (0-строка,1-файл). Код: plaintext 1. 2. 3. 4. 5. 6. примерно так ? И через неё реализовывать функции чтения/записи из потока. По сути это так-же обёртка о которой писал Дмитрий, если я правильно понял. Только более глобальная. Я правильно вас понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 09:58 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа можно передавать указатель на Тип, и в зависимости от типа, выполнять различные операции ? можно передать отдельным параметром тип, т.е. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. вызывать так Код: plaintext 1. Вобщем тоже достаточно громоздко получается. Я бы тебе посоветовал не заниматься минимизацией количества функций, компилятор это прекрасно сделает за тебя. Почитай про inline функции и про правила их написания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ правильно вас понял ? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:09 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Да я не минимизацией занимаюсь:), а хочу чтобы один и тот-же алгоритм приводился один раз, а не писался отдельно для файла или строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:10 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДа я не минимизацией занимаюсь:), а хочу чтобы один и тот-же алгоритм приводился один раз, а не писался отдельно для файла или строки Прочитай файл в строку и обрабатывай своим алгоритмом. Не на том экономишь. Если думаешь что файл медленно читается - решай именно эту проблему, выделяй в памяти место под весь файл и читай его за один раз. Можно использовать средства ОС, тогда ОС это сделает за тебя. Почитай Отображение файла в память . Например для виндовса читай про CreateFileMapping() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:24 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа хочу чтобы один и тот-же алгоритм приводился один раз, а не писался отдельно для файла или строки ну так уже сказали - используй абстракцию потока(с концом файла пущай поток сам разбирается, о типе тож знать в алгоритме незачем ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:28 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Изопропилс концом файла пущай поток сам разбирается, о типе тож знать в алгоритме незачем Да, это по-любому. SashaMercury, примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. С буфером в памяти - по аналогии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 10:53 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Всем спасибо C: До своего отлета постараюсь разобраться и переделать мой код(в любом случае выложу то что получится), использовав все советы выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 11:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли думаешь что файл медленно читается - решай именно эту проблему, выделяй в памяти место под весь файл и читай его за один раз. Можно использовать средства ОС, тогда ОС это сделает за тебя. Почитай Отображение файла в память . Например для виндовса читай про CreateFileMapping() Дежа-вю. Я уже где-то слышал универсальный совет - переколбасить весь I/O на файл-маппинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 13:16 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonДежа-вю. Я уже где-то слышал универсальный совет - переколбасить весь I/O на файл-маппинг. Я этого не предлагал, но пользуюсь частенько для чтения. Как минимум для писания логов это лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2014, 13:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Занимаюсь декомпозицией решения в части организации расположения элементов программного кода. Сейчас, весь код в одном файле, мне это не нравится. Создал файл Macro.h в него поместил такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. и Macro.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. В главном файле (как он правильно называется ? Запускаемый ?), подключаю Macro.cpp. Но мне кажется это неправильно, скорее всего, нужно описать прототипы функций в файле Macro.h и подключать его. Верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 01:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Все работает, но мне кажется, что так не делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 02:00 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
О как. Сделал так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ошибка Error 9 error LNK2001: unresolved external symbol _setstartvalue_Macro ...preprocessing.obj делаю так Код: plaintext 1. 2. 3. нет результата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 02:09 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, подозреваю, что снова смешаны исходники C и C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 09:56 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВ главном файле (как он правильно называется ? Запускаемый ?), подключаю Macro.cpp.это как? #include "Macro.cpp"? нет, так не делается. Делается #include "Macro.h", в котором указываются прототипы функций и структуры данных В файле Macro.h есть Include guard ? И почему опять .cpp? ты же вроде на С решил писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2014, 10:49 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
RWolf, вы полностью правы. egorych, Include guard отсутствует. Моя невнимательность приводит к тому что пишу на Си, а файлы забываю правильно именовать. Спасибо что подсказали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2014, 03:02 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМоя невнимательность приводит к тому что пишу на Си, а файлы забываю правильно именовать. Мы будем тебе чаще это напоминать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2014, 09:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Скажите пожалуйста, как вам на вскидку такая функция ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. PS feof не проверяет текущий символ потока и работает по другому ? Нужно использовать её ? softwarerSashaMercuryдля меня очевидно, что он лучше во всём, Так не бывает. Можно нежно любить свой бугатти вейрон, но таки для некоторых задач лучше подходит камаз, а для некоторых - велосипед. При этом, нежно любя свой бугатти вейрон, стоит таки знать и понимать его недостатки. Скажем, если он сломается где-нибудь под Тюменью, будет достаточно проблематично найти запчасть. SashaMercuryОчевидным решение проблемы определения конца файла будет возврат символа не принадлежащего пространству возможных элементов Одно из важных качеств разработчика - умение выбирать лучшее решение, не останавливаясь на очевидном . Описанное Вами - давно известный путь в адъ. Почти все проходили это, засовывая всякие минус единицы в возраст и прочие "что никак не может встретиться". Потом приходят неанглоязычные пользователи, и вдруг оказывается, что виндовая буква "я" совершенно случайно равна EOF (char ведь у нас signed, мы помним, да?). Потом у нас приходит unicode, и вдруг оказывается, что в пространстве int16 перестаёт хватать места. Итдитп., и в итоге оказывается, что в библиотеку таки попадает feof(), потому что гениальной идеи "возврата символа не принадлежащего пространству" таки не хватает, чтобы прикрыть задницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 08:30 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Скажите пожалуйста, как вам на вскидку такая функция ? Код: plaintext 1. вот это - отвратительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 10:12 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саша! OMG! То о чём я говорил... Тело цикла в скобках while. И что ты получил? Оптимизацию? И как дебаггер будет ходит по этой колбасе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 12:14 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Марк, пользуюсь приёмами K&R.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 13:41 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryЗдравствуйте. Скажите пожалуйста, как вам на вскидку такая функция ? Код: plaintext 1. вот это - отвратительно. ну вот.. K&R глава 6.3..авторы языка так учат.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 13:42 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryну вот.. K&R глава 6.3..авторы языка так учат..фтопку такие приёмы, слишком много побочных эффектов на одну строчку кода, плохо отлаживаемо, плохо читаемо, плохо сопровождаемо. Зато, конечно, олдскулл, будь он неладен )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 13:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorychпропущено... вот это - отвратительно. ну вот.. K&R глава 6.3..авторы языка так учат.. Что-то я не верю что они учат упаковывать всё в скобки к while. Знаешь... год назад здесь был один перец. Он писал ультра-короткий язык. Никто его не понимал. Афтор был непонят. Обижен. И как следствие покинул форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 14:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
немного модифицировал, но в K&R было так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 14:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Хотя есть ещё пример, где именно в скобках происходит присваивание, не могу найти в электронной версии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 14:36 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саш. Ну... будешь бит когда-нибудь коллегами Крепко-крепко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2014, 16:24 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton, ну теперь вы хотя бы согласны с тем, что K&R так делали ? PS к сожалению мои коллеги, и весь мой практически миллионный город ни бум бум в Си.(ну ладно, человек 20 может быть чего и знают) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 11:49 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
и вообще, почему отладчики не могу особым образом проверять такие выражения Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 12:12 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryи вообще, почему отладчики не могу особым образом проверять такие выражения Код: plaintext 1. отладчик ходит по строке, ведь. Если ты в одну строчку записываешь несколько операторов, то ты ССЗБ, отладчик тут не виноват ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 15:28 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorych, а почему не сделать такой отладчик, чтобы он делал остановки внутри строки ? Или разбирал особые выражения, как, например, выше ? Это невозможно сделать физически ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 15:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorych, а почему не сделать такой отладчик, чтобы он делал остановки внутри строки ? Или разбирал особые выражения, как, например, выше ? Это невозможно сделать физически ?как ты себе это физически представляешь? как поставить точку останова на второе присваивание в строке a=b=c; ? неоправданное усложнение и так не простого софта, имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 15:38 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorychкак поставить точку останова на второе присваивание в строке a=b=c; ?даже не так, как поставить точку останова на инкремент в строке int c = *s++ = a[ 0 ];? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 15:40 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorych,я не знаю как(ибо не разбирал процесс отладки).А спрашиваю, возможно ли это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 16:34 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА спрашиваю, возможно ли это? Конечно возможно - разбить выражение на отдельные строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 18:45 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercurymayton, ну теперь вы хотя бы согласны с тем, что K&R так делали ? PS к сожалению мои коллеги, и весь мой практически миллионный город ни бум бум в Си.(ну ладно, человек 20 может быть чего и знают) Ты еще молод в форуме и С++ а уже приобрёл зловещие приёмы демагогии. Хочешь надавить на меня авторитетом К&R ? Зачем тебе это нужно? Ты будешь чувствовать себя "правым" с таким вот исходником: Код: plaintext 1. P.S. По сабжу я не уверен что К&R об этом писали и давали подобные рекомендации. Это противоречит best practices и создаёт нерешаемые проблемы в режиме debug. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 19:35 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton, да вы чего, (( ни на кого я не давлю, чьим-то авторитетом, а просто показал что это я не из головы взял, а из K&R :( Я вообще ультрамирный человек, особенно тут. А вы говорите что я давлю. Обидно такое слышать. Ну если бы мне какой идиот из раздела программирования такое сказал, я бы ему чего ответил, а тут такое слышать обидно ( И я не чувствую себя правым, никогда. Мне никогда не нравится мой код, крайне редко я им доволен хотя бы на 4 с минусом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 04:58 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
я плачущего товарища не рисовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 04:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Просто я прошу тебя не "притаскивать за уши" K&R. Эти парни не имеют никакого отношения к тому что ты написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 11:41 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryни на кого я не давлю, чьим-то авторитетом, а просто показал что это я не из головы взял, а из K&R :(Ньютон заслуженно считается основателем классической механики. Не знаю как сейчас, но мы начинали с первого тома ландафшица. "Начала натуральной философии" на физфаке даже не упоминались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 15:29 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSashaMercuryни на кого я не давлю, чьим-то авторитетом, а просто показал что это я не из головы взял, а из K&R :(Ньютон заслуженно считается основателем классической механики. Не знаю как сейчас, но мы начинали с первого тома ландафшица. "Начала натуральной философии" на физфаке даже не упоминались. надо полагать, что язык на котором написаны Начала, труден для восприятия(ибо 17 век). И если уж на то пошло, то законы Ньютона есть приближение к реальному положению вещей, и некоторые могут сказать что они вообще не должны изучаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 15:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Дело не в языковой разнице, а в актуальности знаний. Классическая механика (в рамках применимости) - актуальна, труды Ньютона - уже нет, но могут быть интересны историкам науки. Тоже самое с K&R: да, основоположники, но использовать их примеры кода налево-направо - несколько неразумно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 15:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonПросто я прошу тебя не "притаскивать за уши" K&R. Эти парни не имеют никакого отношения к тому что ты написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:00 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:00 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovДело не в языковой разнице, а в актуальности знаний. Классическая механика (в рамках применимости) - актуальна, труды Ньютона - уже нет, но могут быть интересны историкам науки. Тоже самое с K&R: да, основоположники, но использовать их примеры кода налево-направо - несколько неразумно. Вы считаете что в настоящее время программирование на Си, ушло сопоставимо далеко как теория относительности от физики Ньютона, или сопоставимо далеко как труды Ньютона в 17 веке, и их современное толкование ? Хорошо, мнение всех я понял, приму к сведению. Всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
И что? Тот факт, что C/C++ позволяет создавать замысловатые конструкции никак не меняет простых фактов: 1. Замысловатый код сложнее понимать и отлаживать; 2. Разработчики компиляторов не зря жуют свой хлеб и в состоянии сгенерировать оптимальный машинный код, даже если программист не пытался вывернуться наизнанку. Да, программист должен понимать хитропопый код, но вот использовать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:07 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Согласитесь, читать о Родионе Раскольникове не так просто, как читать о Гарри Поттере. Но это не значит, что я должен писать книги равняясь на Роулинг, а Фёдора Михайловича не открывать. Да, если это массовый продукт, то зачем изголяться, приму к сведению. Но для меня, программный код это повесть. И мне не хочется писать примитивные книги PS Прочитать Гарри Поттера можно за 5 часов(самую толстую книгу). Любую книгу Достоевского минимум неделю. Но от чего вы получите удовольствие ? PSPS Всё, я принял к сведению ваше мнение, учту:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:15 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Начнем с того, что книгу по С в которой все листинги ЗАГЛАВНЫМИ буквами, вообще не стоит читать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:17 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovИ что? Тот факт, что C/C++ позволяет создавать замысловатые конструкции никак не меняет простых фактов: 1. Замысловатый код сложнее понимать и отлаживать; 2. Разработчики компиляторов не зря жуют свой хлеб и в состоянии сгенерировать оптимальный машинный код, даже если программист не пытался вывернуться наизнанку. Да, программист должен понимать хитропопый код, но вот использовать ... только прочитал. 1. сложнее, не значит хуже(значит получишь больше удовольствие). Меньше псевдопрограммистов будут работать программистами. Плохой код, и сложный код, разные вещи. Прототип функции копирования без указания квалификатора const к источнику, сложное именование переменных, и т.д.-плохой код, что такое сложный код, другой вопрос. 2. ну..тут вам виднее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, у менять есть с маленькими буквами, там аналогично :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. сложнее, не значит хуже(значит получишь больше удовольствие)Я ещё раз напомню о производстве кода. За собственным верстаком можно развлекаться как угодно. Но не более того.Меньше псевдопрограммистов будут работать программистами"Нет сынок, теперь ты будешь меньше кушать".Плохой код, и сложный код, разные вещиСложный код, как правило, разновидность плохого. Есть исключения, где сложность кода определяется нетривиальностью задачи, но, в этом случае, любой вариант не будет тривиальным. Если же "а вот тут мы на шкаф залезем" вместо "ди эрсте колонне марширт, ди цвайте колонне марширт", то это, imho, звоночек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:38 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, ...,der dritte Kolonne marschiert .. ;) Доброго времени суток :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:56 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, впрочему, Фуль, или Пфуль (не помню), был скорее примером в мою пользу, чем в вашу :p ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 16:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саш. Ох как-же я люблю цитировать сам себя... Ну что мне снова найти фразу где я говорю об исключительности функции strcpy и ассемблере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 19:22 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonСаш. Ох как-же я люблю цитировать сам себя... Ну что мне снова найти фразу где я говорю об исключительности функции strcpy и ассемблере? Марк, как давно появилась эта операция в ассемблере ?Примерно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 15:28 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Смотря в каком ассемблере. В true-RISC - нет и не должно быть. Про Z80 - не в курсе, в x86 - изначально было rep movs и два специальных регистра для поддержки. Даже три, если считать регистр цикла. Хотя сильно оптимизированная версия будет использовать load/double shift/store в общем случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 15:33 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
До моего рождения. Речь идёт скорее всего об одной из первых версий С для разработки Unix. C 1973 года. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 15:46 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Это к тому, что я не уверен в том, что именно этот пример представлен в книге из-за связи с какими-то расширенными командами процессора (причём RISC процессоры отпадают(как я предполагал, а выше подтвердили)). Пример приведен не отталкиваясь от того, как будет работать отладчик. Он приведен с упором на возможности и преимущества языка. В любом случае, я не занимаюсь демагогией, и я вас прекрасно понимаю, если отладчик работает так как он работает, то такой код может добавить проблем при отладке. Полностью согласен. Но вот у меня такой вопрос. Как вы считаете, в данном конкретном случае: 1. Программист должен ограничивать себя, из-за несовершенства отладчика ? 2. Правильно ли, что программист должен ограничивать себя из-за несовершенства отладчика ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 15:47 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryпричём RISC процессоры отпадают(как я предполагал, а выше подтвердили)Отпадают не RISC, а true-RISC. Скажем, у вполне RISC-овых IBM Power, насколько я знаю, команда пересылки невыровненной цепочки байт - есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 15:58 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Программист должен ограничивать себя, из-за несовершенства отладчика ? 2. Правильно ли, что программист должен ограничивать себя из-за несовершенства отладчика ?программист должен ограничивать себя, чтобы писать понятный, легкочитаемый и сопровождаемый код. Совершенство/несовершенство отладчика в данном случае - вопрос 800ой очерёдности. Недавно топик был про v[ i++ ] = i++; - явление такого же порядка. Слишком много побочных эффектов для одной строчки кода, что потенциально может привести к появлению трудноуловимых ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 16:03 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Программист должен ограничивать себя, из-за несовершенства отладчика ? Тут речь идёт о другом. Скорее всего ты ограничиваешь своих коллег. Ты заставляешь их делать code-review следующей какашки. Код: plaintext 1. Если ты реализуешь "некоторую логику" то должно следовать ЯСНОЕ и ЧЁТКОЕ доказательство ее корректности в ОБЩЕМ СЛУЧАЕ. Тоесть функция не должна вызывать ни у кого вопросов или неоднозначных толкований. Цикл ВСЕГДА содержит выражения инициализации, итерационное выражение и тело цикла. 3 сущности. Они должны быть чётко обозначены. В строгих ЯП типа Pascal специально созданы жёсткие синтаксические конструкты. Декларации. Выражения инкремента. Тело цикла. Там нет возможности сделат финт или написать что-то неоднозначное. И не надо говорить про несовершенство отладчика. Он - простой и ясный инстумент для хождения по СТРОКАМ исходника. И если ты намисал ВСЁ приложение в 1 строчку то ты сам себе злобный буратино! Не пиши так! Не ходите дети... в Африку гулять. Выражение Код: plaintext 1. написано профессионалами. Они его миллион раз оттестировали. Они соптимировали код для коротких ассемблерных реализаций. Они не нуждались в дебаггере потому-что здесь дебаггер уже никогда не будет нужен. Эта функция - атом. В отличие от твоего кода. Который будет еще over 9000 раз исправлен. Дополнен условиями и кейсами. Вобщем ты можешь писать как угодно. Но как только ты выносишь код на суд, в форум. В паблик SVN. Просишь критиковать. Обсуждать. То тут уж - извини. Я оттянусь по полной. . Кстати я всегда прислушиваюсь к чужим советам и по поводу своего кода. Бывает что и глаз замылен. И лень-паттерн... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 16:15 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonИ лень-паттерн... нашевсё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 16:21 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonЯ оттянусь по полной. . всегда рад :) maytonКстати я всегда прислушиваюсь к чужим советам и по поводу своего кода. Бывает что и глаз замылен. И лень-паттерн... прислушиваюсь всегда к чужим советам. Basil A. Sidorov,egorych, mayton, всем спасибо за критику и предложения:)Все мнения учтены, и все они у меня в голове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 16:21 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саша дуй сюда Физики есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2014, 18:27 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Праздникам конец. Не помню говорил ли, но реализация алгоритма М (выполнение макрозамен в коде программы) завершена, ещё в прошлом году. Однако, мне не нравится моя реализация. Потому занимаюсь изменением алгоритма.(кстати, а есть ли для этого словосочетания слово аналогичное слову "рефакторинг" ? ). Да, собственно потому, то что сделал не выложил. Потому что не доволен этим. Первый шаг алгоритма M0 предлагаю сделать таким: считать весь код программы в heap. Адрес объекта например char* code. В дальнейшем алгоритм будет работать только с этим объектом. В настоящее время, токенизация происходит из файла. Причины такого решения: 1. Как можно быстрее освободить файл, вследствие чего предотвратить возможные ошибки. Например, во время работы с файлом с ним что-то произойдёт и он будет прочитан не полностью. Если время в течении которого мы с ним работаем больше, то вероятность того что это случится выше. 2. Предполагаю, что за счёт этого я не потеряю в производительности больше чем незначительно, даже в том случае если причина1 неверна. При возможных небольших потерях в производительности, выигрываю в простоте кода. Минусы: 1. Выделение памяти, хотя незначительное. Допустим код программы содержит 10^6 символов<2^(3.4*6) Байт<2^21 Байт=2 Мб Не так много, но на старых машинах прилично. 2. Возможные издержки во времени Возникающие проблемы: Как мне узнать сколько памяти в куче выделить на конкретный файл? Нужно выделить столько, сколько нужно + небольшой задел, мало-ли, ошиблись. Искать конец файла, или считать количество символов не считаю правильным, ибо долго. Должна где-то храниться информация о размере файла, и её вероятно как-то можно прочитать. Верно ? Подскажите пожалуйста, имеют ли место быть рассуждения выше ? Делали ли бы вы шаг М0 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 03:47 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Как можно быстрее освободить файл, вследствие чего предотвратить возможные ошибки. Например, во время работы с файлом с ним что-то произойдёт и он будет прочитан не полностью. Если время в течении которого мы с ним работаем больше, то вероятность того что это случится выше. Зачем??? Не шмогли значит не шмогли. Выдал ошибку что мол файл неожиданно закончился, или заблокирован, или что там еще с ним случилось и отменил всё. Какой смысл предотвращать ошибку файлового типа на этапе компиляции? И если ты ее даже предотвратишь: была версия файла номер N. Ты начал с ней работать, а в это время пришел злодей-юзер, подправил файл и стала там версия N+1. А у тебя в это время продолжается компиляция версии N. Откомпилировали, запустили - видим что программа работает не правильно. Но мы же знаем что мы эту ошибку только что исправляли?! SashaMercuryКак мне узнать сколько памяти в куче выделить на конкретный файл? Нужно выделить столько, сколько нужно + небольшой задел, мало-ли, ошиблись. Искать конец файла, или считать количество символов не считаю правильным, ибо долго. Должна где-то храниться информация о размере файла, и её вероятно как-то можно прочитать. Верно ?Верно. Хранится она в FS (File System) и доступна когда ты читаешь директорию, или через stat()/fstat() функции, или через пару fseek()+ftell() которые выполняются очень даже быстро (потому что внутри используют fstat()). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 07:04 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
White Owl, спасибо. Вы считаете, что не стоит менять текущий алгоритм в контексте токенизации из файла ? Вы бы не стали использовать предварительное чтение данных в кучу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 08:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПервый шаг алгоритма M0 предлагаю сделать таким: считать весь код программы в heap. Адрес объекта например char* code. В дальнейшем алгоритм будет работать только с этим объектом. В настоящее время, токенизация происходит из файла. Причины такого решения: 1. Как можно быстрее освободить файл, вследствие чего предотвратить возможные ошибки. Например, во время работы с файлом с ним что-то произойдёт и он будет прочитан не полностью. Если время в течении которого мы с ним работаем больше, то вероятность того что это случится выше. 2. Предполагаю, что за счёт этого я не потеряю в производительности больше чем незначительно, даже в том случае если причина1 неверна. При возможных небольших потерях в производительности, выигрываю в простоте кода. Если у тебя файл с исходником могут (внезапно) украсть инопланетяне то в топку твою файловую безопасность. Если твои файлы лежат на сетевом диске NFS/SMB/ftp/webdav то копируй их себе в каталог проекта или хоть в $TEMP/$TMP и наслаждайся эксклюзивом. Если твой компиллятор просто так по приколу всё прогружает в хип то рано или поздно разгневанный анонимос придёт к тебе в блог и выскажет своё мнение по поводу тебя и твоей драгоценной мамы (дай бох ей здоровья). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 12:43 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
mayton, :D спасибо, и вашей маме здоровья. Эту идею никто не поддержал. Хорошо. Приму вашу точку зрения, оставлю всё как есть, по вопросу токенизации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 14:21 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Не поддерживают, потому что не надо подстраивать алгоритм под невероятные сценарии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 15:23 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Посмотрите http://opencxx.sourceforge.net/ OpenC++ is C++ frontend library (lexer+parser+DOM/MOP) and source-to-source translator ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 21:22 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Владимир2012, зачем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 01:40 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Я решил, что сначала мне нужно получить список всех замен (как бы это слово правильно назвать, макроподстановок? ) в тексте Приведенная ссылка - это тот проект с чего началась PVS-Studio /согласно их мемуаров/. Если вас интересует тема лексического разбора C++ ..., то этот проект по идее должен был бы быть вам интересен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2015, 20:58 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, пользуюсь вашим советом. В свете недавних решений касаемо алгоритма, в первую очередь нужно реализовать алгоритмы через объект Stream. Изменил то, что вы предлагали. Подскажите пожалуйста, имею ли я право создавать такую структуру вообще, и подходит ли она мне в дальнейшем в таком виде ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2015, 10:14 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Владимир2012, мне нравится делать это самому. Не так много знаю, чтобы пользоваться готовыми решениями. Позже обязательно посмотрю. Спасибо ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2015, 10:16 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryимею ли я право создавать такую структуру вообще, и подходит ли она мне в дальнейшем в таком виде ? Имеете. Подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2015, 10:32 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня возник вопрос. Правильно ли я понимаю, что вызов функций через объект Stream, будет медленней чем вызов функций непосредственно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 08:05 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСегодня возник вопрос. Правильно ли я понимаю, что вызов функций через объект Stream, будет медленней чем вызов функций непосредственно ? Да, косвенная адресация занимает больше тактов процессора. Но на практике задержка будет несущественной по сравнению например со временем доступа к файлу на диске. Да и современнные процессоры умеют оптимизировать это. А чтобы устранить оверхед от дополнительного уровня абстракции, можно применить буферизацию. Т.е. читать не по символу из потока, а блоками. А уже из блока читать символы простым сдвигом указателя. Примерно так и реализуются обычно потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 08:26 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Но для того чтобы читать блоками, нужно знать размер файла, верно ?Чтобы не прочитать то, что я не должен прочитать. Да и вообще, в любом случае, считывание блока, будет абстракцией в том смысле, что по факту я буду считывать один блок по символам. Либо это происходит по другому ? PS Уже не эти ли функции тут используются fread, fwrite ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 09:00 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
В свете рассуждений выше, возможно всё-таки лучше оставить код без введения интерфейса независимого от реализации. Думаю ещё вообщем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 09:55 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
И при этом добавить буферизацию, например считывать по строкам(для начала). Первоначально разобравшись с тем, как это делать. Таким образом, нивелирование задержек при внедрении косвенной адресации, можно заменить на ускорение существующего алгоритма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 09:56 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Вам вообще ничего не надо оптимизировать. У вас алгоритма-то рабочего собственно пока нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 13:34 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercury, Вам вообще ничего не надо оптимизировать. У вас алгоритма-то рабочего собственно пока нет :) есть. Но мне он не нравится. Скоро выложу, когда доведу код до ума ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 14:19 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly MoskovskySashaMercury, Вам вообще ничего не надо оптимизировать. У вас алгоритма-то рабочего собственно пока нет :) есть. Но мне он не нравится. Скоро выложу, когда доведу код до ума Саш я предлагаю тебе и всем присутсвующим почитать Франсуа Рабле - Гаргантюа и Пантагриэль - Глава -4 - О том, как Пантагрюэль правильно разрешил один удивительно неясный и трудный вопрос - разрешил столь мудро, что его решение было признано поистине чудесным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2015, 15:07 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Марк, спасибо, прочитаю обязательно. Но позже. Если научный узнает что я сейчас что-либо кроме математики читаю, то мало не покажется, да и времени очень мало. Ребята, подскажите пожалуйста как нормально построить структуры и методы, и связи. То как это делается в виде таблиц мне не нравится. Или ткните куда почитать пожалуйста :) Это всё к этой задаче. мне постоянно всё не нравится, и я её переделываю. PS Знаю что долго. Всё началось с того, что изначальный алгоритм был неверный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 10:08 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Хочу нарисовать на большом листе, и уже закончить с ней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 10:09 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРебята, подскажите пожалуйста как нормально построить структуры и методы, и связи. UML ? не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 12:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryХочу нарисовать на большом листе, и уже закончить с ней На самом деле рисовать можно в любом виде понятном тебе самому. Даже будет плюс если ты разработаешь систему своих собственнх графических обозначений. Я вот в использовани Relational Diagram нигде не могу найти редактора который подводит "стрелочку со связью" (многие к одному) не к сущности а к сущности+полю. Ну не могу и всё тут. А это важно. Тк. по именам колонок не всегда понятно какая именно ключуется с foreign key. Рисую сам поэтому. А UML нужен в основном для презентаций или "общих" SR где в красивых и обтекаемых формах показывают всю крутизну и продвинутость создаваемого так называемого ПО. И "структуры", "методы" и "связи" ты можешь показать десятком способов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 12:55 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Хорошо. Спасибо за совет. Подскажите пожалуйста, имеет ли место быть такая функция ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. У меня до этого добавление было сразу облако. А мне кажется это неправильно. Нужно формировать макрос, и потом добавлять макрос в пространство макросов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 03:41 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Значит я должен хранить массив указателей макроподстановки, а не так как я сейчас храню. Верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 07:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Вот так Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 07:16 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Вот ещё функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. такие функции имеют место быть ? Подскажите пожалуйста. Чувствую что где-то ошибся. А вот так предполагаю использовать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 07:54 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Разобрался. Проблема была с выводом. Всё выше верно. Подскажите пожалуйста по следующему вопросу. Реализовать функцию чтения идентификаторов из потока Файл очень легко. Потому что мы всегда напрямую работаем с внутренним указателем потока. Работа по извлечению идентификаторов из строки сложнее. Нужно дополнительно хранить текущий индекс внутри строки. Можно как-нибудь уйти от этой проблемы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:11 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
У строки нет курсоров. Придётся хранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:31 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonУ строки нет курсоров. Придётся хранить. хорошо, спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:36 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
А на С++ можно как-либо решить эту проблему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:52 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Должен быть какой-то объект Reader который рассматривает строку как файл. Правда я давно не следил за развитием STD/Boost и не знаю есть ли там такое или нет. Как по мне - должно быть. Пускай знающие подскажут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:54 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНужно дополнительно хранить текущий индекс внутри строки. Можно как-нибудь уйти от этой проблемы ?и в чём проблема? жалко памяти на один char*?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:03 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Ребята, вы не поверите. 5 февраля выходит Игра в имитацию. Жду с нетерпением. Только сейчас узнал. Мне пора. PS прошу прощение за оффтоп, не мог удержаться и не поделиться с Сообществом радостной новостью.Про Алана Тьюринга не каждый день кино снимают C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorych, мне кажется, что каждая переменная удваивает сложность программы. Жалко читабельности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:08 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonДолжен быть какой-то объект Reader который рассматривает строку как файл.std::stringbuf? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:09 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorych, мне кажется, что каждая переменная удваивает сложность программы. Жалко читабельностинаоборот, с удачным именем если, и к месту применённая, то наоборот, уменьшает сложность и повышает читабельность. Пора тебе читать Совершенный код , чтобы не ходить по граблям, которые давно найдены, исследованы и описаны )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:13 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРабота по извлечению идентификаторов из строки сложнее. Нужно дополнительно хранить текущий индекс внутри строки. Сложнее, но не особо. Сделай структуру-обертку и с ней работай Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:17 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Кстати, а вы знаете почему Стивен и ко выбрали логотипом яблоко ? Одну из трёх теорий, непосредственно связанных с ним PS ну все, сейчас не смогу заснуть, жду - не дождусь фильма ^_^ Модератор: Редактировано Модератор: Вложение удалено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryРабота по извлечению идентификаторов из строки сложнее. Нужно дополнительно хранить текущий индекс внутри строки. Сложнее, но не особо. Сделай структуру-обертку и с ней работай Код: plaintext 1. 2. 3. 4. Думал про это. Но решил не использовать. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:19 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Дмитрий, по хорошему ещё бы длину в ней хранить. Если ничего не придумаю до понедельника, то буду использовать обёртку, вероятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:21 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДмитрий, по хорошему ещё бы длину в ней хранить. Если ничего не придумаю до понедельника, то буду использовать обёртку, вероятно Если это классическая строка, то конец так проверяется Код: plaintext 1. если нет, то добавить указатель на последний символ Код: plaintext 1. 2. 3. 4. 5. и проверять так Код: plaintext 1. так операций меньше по сравнению с хранением смещения и длины строки. Последовательное чтение элементарно делается: Код: plaintext 1. 2. 3. 4. 5. 6. изначально index = str - 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:36 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorych, мне кажется, что каждая переменная удваивает сложность программы. Жалко читабельности В Паскале строки хранят внутри себя длину. Точнее структура данных представляющая строки ее инкапсулирует. Это вобщем-то имеет преимущество. Сравнение длин строк идёт очень быстро. В отличие от "C" ASCIIZ строк. Развивая эту идею можно положить рядышком с длинной и current_position. Твой тезис о читабельности - неверный. Инкапсуляция тебе в помощь. А попытка "скромничать" породит еще несколько антипаттерном. Будешь потом "тяпкой" корчевать свой код. Выкорчёвывать "паттерны скромности". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:36 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Я подумаю, обо всём этом. PS ребята, я боюсь эти британцы исказили историю, и фильм может разочаровать.И выбрали попсового актёра на роль Тьюринга. В английских театрах всё наоборот. Главные роли играют самые некрасивые и непримечательные люди. Почему ? Для того чтобы передавать идею и завоевывать публику игрой, а не лицом. Актерские качества первичны. меня гонят..Всего доброго Модератор: Редактировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:43 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Саша. Давай британцев и Тьюринга под спойлер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:17 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
maytonВ Паскале строки хранят внутри себя длину.что ограничивает размер строки до 255 символов, потому что длина у них хранится в нулевом байте. А если надо строку побольше, то бери ASCIIZ-строку, чудес то ведь не бывает )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:20 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorychчто ограничивает размер строки до 255 символов, потому что длина у них хранится в нулевом байте.Это у Борландов. Но никто не запрещает использовать честный record. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:25 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Точно. Оракл тоже свинью подкинул. Самое смешное что один и тот-же тип данных VARCHAR2 в PLSQL машине ограничен в 32К а в табличке не более 4000 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:25 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНо никто не запрещает использовать честный record.а рекорд - это не аналог структуры у них, разве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:48 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorychа рекорд - это не аналог структуры у них, разве?Аналог, но это не мешает использовать записи для реализации строк языка Pascal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 18:05 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovegorychа рекорд - это не аналог структуры у них, разве?Аналог, но это не мешает использовать записи для реализации строк языка Pascal.если внутри будет сидеть pchar и длина строки отдельным полем то, это ничем не отличается от того, что DimaT предлагает для С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 18:19 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
egorychBasil A. Sidorovпропущено... Аналог, но это не мешает использовать записи для реализации строк языка Pascal.если внутри будет сидеть pchar и длина строки отдельным полем то, это ничем не отличается от того, что DimaT предлагает для С. Это близко к stl::string но Саша насколько я понял не юзает STL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 19:07 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. пока сделал так. Но мне это не очень нравится. Хочется реализацию этого на уровне стандартной библиотеки. Только не такую как в языке Паскаль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2015, 03:36 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
А вот так читаю, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. вечером буду тестировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2015, 03:49 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. 1. Пришел к выводу, что по хорошему вот как нужно делать: в каждом крупном проекте должен быть файл с именем fe: libs.h В него должны подключаться все модули этой программы. А в файле содержащем точку входа нужно подключать libs.h 2. Возможно константы определенные макрозаменами стоит хранить в одном файле, и включать его в каждый . Далее циклом собирать каждую единицу трансляции. Это предложение совсем абстрактное. 3. Можно ли построить саму программу или корректный механизм трансляции и сборки программ без использования дополнительных директив сборки, fe таких как pragma once и схожего назначения? Это основной вопрос о котором я думаю. Возможно это так, но тогда процесс добавления нового модуля в программу будет крайне затруднителен. Ответьте пожалуйста на этот вопрос 4. Используете ли вы pragma once и как вы относитесь к этой директиве ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 03:57 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. 1. Пришел к выводу, что по хорошему вот как нужно делать: в каждом крупном проекте должен быть файл с именем fe: libs.h В него должны подключаться все модули этой программы. А в файле содержащем точку входа нужно подключать libs.h 2. Возможно константы определенные макрозаменами стоит хранить в одном файле, и включать его в каждый . Далее циклом собирать каждую единицу трансляции. Это предложение совсем абстрактное. 3. Можно ли построить саму программу или корректный механизм трансляции и сборки программ без использования дополнительных директив сборки, fe таких как pragma once и схожего назначения? Это основной вопрос о котором я думаю. Возможно это так, но тогда процесс добавления нового модуля в программу будет крайне затруднителен. Ответьте пожалуйста на этот вопрос 4. Используете ли вы pragma once и как вы относитесь к этой директиве ?1. Да. Я часто использую такой заголовочный файл. Он особенно хорошо живет вместе с прекомпляцией заголовков. 2. Объявлять константы через дефайны - да. Циклом собирать единицу трансляции... ээээ??? Зачем там цикл? 3. Да конечно можно собирать без директив сборки. Все эти директивы это совершенно ненужные костыли которые больше вредят чем помогают. Используя их можно чуть-чуть облегчить себе жизнь на первом году, но они жутко мешают при попытках переноса программы в другое окружение. 4. По существу единственная pragma которую имеет смысл использовать это pack. Все остальные нафиг не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 06:28 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Ребята, Анатолий, вы не поверите. Программа препроцессорной обработки кода на языке программирования Си в первом приближении готова C: И её не так стыдно показать. Только немного потестирую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 07:09 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Однако чем-то pragma once помешала? Неужели приятнее плодить что-то вроде #ifndef _FILE_H_SOME_GUID_LIKE_CRAP/#define _FILE_H_SOME_GUID_LIKE_CRAP/#endif по заголовкам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:06 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
wst, её не все компиляторы поддерживают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:59 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
wstОднако чем-то pragma once помешала? Неужели приятнее плодить что-то вроде #ifndef _FILE_H_SOME_GUID_LIKE_CRAP/#define _FILE_H_SOME_GUID_LIKE_CRAP/#endif по заголовкам?ага, приятней. Ибо стандартно, православно и работает везде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 10:00 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Не поддерживает IBM XL C/C++. Наверняка не поддерживают компиляторы от каких-то микроконтроллеров. Это повод отказываться от нее в остальных случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 11:25 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Хм... тут вообще всё печально. По поводу #pragma once https://ru.wikipedia.org/wiki/Pragma_once цитирую В наборе компиляторов GCC до версии 3.4 считалась устаревшей и для применения не рекомендовалась.[1] Однако из-за широкого применения это решение было изменено.[2] Можно использовать обе команды, #pragma once и include guards, для написания переносимого кода, что также может принести выгоду от применения #pragma once при оптимизации (если компилятор её поддерживает): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 12:25 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Лично мне хватает того, что её не поддерживает IAR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 13:30 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
wstОднако чем-то pragma once помешала? Неужели приятнее плодить что-то вроде #ifndef _FILE_H_SOME_GUID_LIKE_CRAP/#define _FILE_H_SOME_GUID_LIKE_CRAP/#endif по заголовкам? Тут другой вопрос. Задача включения хедера once решается препроцессором с #ifdef-define-endif ? Решается. Если следовать принципу KISS, то ничего больше делать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 14:04 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Вроде бы проверил всё что мог. Максимальный уровень вложенности 2^10 макроподстановок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 13:18 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Рекомендую github.com для публикации кода. Там и просмотр кода и история изменений прямо на сайте. А смотреть запакованные исходники приложенные к сообщению никто не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 13:22 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Я буду смотреть. Но буду ворчать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2015, 17:23 |
|
||
|
Анализ исходного кода. Разбор IOCCC 1985 august
|
|||
|---|---|---|---|
|
#18+
Коллеги. Зашёл на хабр. Ссылки по теме макропроцессинга. Может кому будет интересно Магия макросов для объединения объявления и реализации http://habrahabr.ru/post/148494/ Грязные трюки с макросами C++ http://habrahabr.ru/post/246971/ Макросы с переменным числом параметров http://habrahabr.ru/post/138150/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 19:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019118]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
201ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 296ms |

| 0 / 0 |
