Опции и настройки компилятора

Прагмы

Предварительное объевления объектов

@__PRAGMA_DECLARE__

⚠️ НЕ РЕАЛИЗОВАНО: прагма @__PRAGMA_DECLARE__ в текущей версии не существует (см. список поддерживаемых @__PRAGMA_* в src/syntax/parser.cpp)

    @__PRAGMA_DECLARE__( func(arg) );

Импорт нативной функции / переменной

@__PRAGMA_NATIVE__

⚠️ НЕ РЕАЛИЗОВАНО: прагма @__PRAGMA_NATIVE__ в текущей версии не существует; импорт нативных объектов выполняется через @extern/@forward или `name(...):T := %native...` (см. docs/types/native)

    // import native int printf(char *format, ...)
    @__PRAGMA_NATIVE__( printf(format:FmtChar, ...):Int32 );

Управление диагностикой компилятора

@__PRAGMA_DIAG__ -

        @__PRAGMA_DIAG__(push)
        @__PRAGMA_DIAG__(ignored, "-Wundef")
        @__PRAGMA_DIAG__(warning, "-Wformat" , "-Wundef", "-Wuninitialized")
        @__PRAGMA_DIAG__(error, "-Wuninitialized")
        @__PRAGMA_DIAG__(pop)

@__PRAGMA_MESSAGE__

    #pragma message "Compiling " __FILE__ "..."
    @__PRAGMA_MESSAGE__("Compiling ", __FILE__, "...")


    #define DO_PRAGMA(x) _Pragma (#x)
    #define TODO(x) DO_PRAGMA(message ("TODO - " #x))

    @@TODO( ... )@@ := @__PRAGMA_MESSAGE__("TODO - ", @#...)

    @TODO(Remember to fix this)  # note: TODO - Remember to fix this

@__PRAGMA_WARNING__ @__PRAGMA_ERROR__

  • @__PRAGMA_LOCATION__
        // #line 303 "location.hh"
        // Prototype - @__PRAGMA_LOCATION__( pop )
        // Prototype - @__PRAGMA_LOCATION__( push ) or @__PRAGMA_LOCATION__( push, 'filename') or @__PRAGMA_LOCATION__( push, 'filename', line)
        // Prototype - @__PRAGMA_LOCATION__( line ) or @__PRAGMA_LOCATION__( line, 'filename')

Управление опциями компилятора

@__OPTION__, @__OPTION_PUSH__, @__OPTION_POP__

Макросы для временного изменения severity диагностических опций компилятора из исходного кода:

    @__OPTION_PUSH__;
    @__OPTION__("macro-redefined", "ignore");
    # ... определения макросов, переопределения разрешены ...
    @__OPTION_POP__;
  • @__OPTION_PUSH__ — сохраняет текущий набор опций.
  • @__OPTION__("<имя_опции>", "<значение>") — устанавливает severity опции. Значение — одно из: fatal, error, warning, remark, note, ignore.
  • @__OPTION_POP__ — восстанавливает предыдущий набор опций.

Опция macro-redefined управляет поведением при переопределении макроса: по умолчанию fatal (запрещено), ignore — разрешает переопределение без диагностики.

Управление макросами

@__PRAGMA_EXPECTED__ - Следующий символ должен быть одним из списка

    @__PRAGMA_EXPECTED__( @\ {, @\ {*, @\ {+ ) 
        { }

    @__PRAGMA_EXPECTED__( @\ {, @\ {*, @\ {+) 
        {+ +}

@__PRAGMA_UNEXPECTED__ - Запретить использование перечисленных символов

    @__PRAGMA_UNEXPECTED__( @\{, @\{*, @\{+) 
        {- -}
    @__PRAGMA_UNEXPECTED__( @\{*, @\{+)
        {   }

@__PRAGMA_NO_MACRO__ - Следующий символ не макрос

Аннотации

@__ANNOTATION_SET__

    @__ANNOTATION_SET__(name)
    @__ANNOTATION_SET__(name, "value")
    @__ANNOTATION_SET__(name, 1)

@__ANNOTATION_IIF__

Не используется (заготовки на будущее)

@__PRAGMA_IGNORE__

        static const char * ignore_space = "space";
        static const char * ignore_indent = "indent";
        static const char * ignore_comment = "comment";
        static const char * ignore_crlf = "crlf";
  • @__PRAGMA_INDENT_BLOCK__

  • @__PRAGMA_MACRO__ -

  • @__PRAGMA_MACRO_COND__

  • @__PRAGMA_FINALIZE__