Как стать автором
Обновить

Комментарии 21

НЛО прилетело и опубликовало эту надпись здесь
Точно сказать что «Продолжение будет» или «Продолжения не будет» я сказать не могу.

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


А код плохой, да. Удручают, например, определения функций в заголовочных файлах, или каскады 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, например). Когда у вас будет больше одного типа данных, поддержка строк и рекурсии — вы сами поймёте, что не так с вашим кодом, и как его можно улучшить, это нормально. Продолжайте в том же духе!
Спасибо.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории