Pull to refresh

Comments 21

UFO just landed and posted this here
Точно сказать что «Продолжение будет» или «Продолжения не будет» я сказать не могу.

Про интерпретаторы байткода на Хабре недавно был очень хороший пост. Мне кажется, он будет вам интересен, в том числе как пример хорошей обучающей статьи на данную тему.


А код плохой, да. Удручают, например, определения функций в заголовочных файлах, или каскады else if вместо одного switch.

А что не так с определениями функций в заголовочных файлах?
Во-первых, с точки зрения организации кода, в заголовочных файлах обычно определяется только интерфейс какого-то модуля программы — объявления типов и функций, документирующие комментарии и т.д. Детали реализации помещают в файлы .c

Во-вторых, если такой заголовочный файл подключить в два раздельно компилирующихся файла, то она скомпилируется в каждом из них, что приведет к ошибке на стадии компоновки — нескольким определениям одного и того же имени (функции).
Но шаблонные функции определяются именно в заголовочных файлах.
что приведет к ошибке на стадии компоновки

Поэтому есть ключевое слово inline. Хотя лично мне нравится определение функций в .c/.cpp файлах, а не в заголовках.

Я заметил 4 пунктуационных ошибки до #habracut
Буду рад если вы мне на них укажете.
#define $CRG
Офигеть! А что, так можно было?
В именах или в качестве имён макросов можно использовать "$" & "_".
С подчёркиванием понятно, но $ было неожиданно, спасибо.

Implementation-defined. Где-то можно, где-то нельзя.
https://en.cppreference.com/w/c/language/identifier


An identifier is an arbitrarily long sequence of digits, underscores, lowercase and uppercase Latin letters, and Unicode characters specified using \u and \U escape notation (since C99).
(...)
It is implementation-defined if raw (not escaped) Unicode characters are allowed in identifiers

В GCC, например, можно.

Код к сожалению не идеален, но для начала вполне неплохо. Я бы порекомендовал вам написать простенький транслятор с C-подобного псевдоязыка в байт-код вашей машины (это далеко не так сложно, как кажется, смотрите рекурсивный спуск, и раз уж вы пишете на C — вам могут помочь такие утилиты как lex и yacc, например). Когда у вас будет больше одного типа данных, поддержка строк и рекурсии — вы сами поймёте, что не так с вашим кодом, и как его можно улучшить, это нормально. Продолжайте в том же духе!
UFO just landed and posted this here
Sign up to leave a comment.

Articles