Перейти к содержанию

Рекомендуемые сообщения

  • Администратор
Опубликовано

Pragma это переменные (Да, смейтесь, я не силен в терминологии SourceMod), которые обычно при написании плагина мы указываем в самом верху исходника. Обычно это что то вроде:

#pragma semicolon 1
#pragma tabsize 0
#pragma newdecls optional
#pragma newdecls required

Так вот, чисто для себя, оставлю здесь полный Pragma Case. Возможно мне пригодится в будущем.

case tpPRAGMA:
            if (!SKIPPING) {
                if (lex(&val, &str) == tSYMBOL) {
                    if (strcmp(str, "ctrlchar") == 0) {
                        while (*lptr <= ' ' && *lptr != '\0')
                            lptr++;
                        if (*lptr == '\0') {
                            sc_ctrlchar = sc_ctrlchar_org;
                        } else {
                            if (lex(&val, &str) != tNUMBER)
                                error(27); /* invalid character constant */
                            sc_ctrlchar = (char)val;
                        }
                    } else if (strcmp(str, "deprecated") == 0) {
                        while (*lptr <= ' ' && *lptr != '\0')
                            lptr++;
                        pc_deprecate = (char*)lptr;
                        lptr = (unsigned char*)strchr(
                            (char*)lptr,
                            '\0'); /* skip to end (ignore "extra characters on line") */
                    } else if (strcmp(str, "dynamic") == 0) {
                        preproc_expr(&pc_stksize, NULL);
                    } else if (strcmp(str, "rational") == 0) {
                        while (*lptr != '\0')
                            lptr++;
                    } else if (strcmp(str, "semicolon") == 0) {
                        cell val;
                        preproc_expr(&val, NULL);
                        sc_needsemicolon = (int)val;
                    } else if (strcmp(str, "newdecls") == 0) {
                        while (*lptr <= ' ' && *lptr != '\0')
                            lptr++;
                        if (strncmp((char*)lptr, "required", 8) == 0)
                            sc_require_newdecls = 1;
                        else if (strncmp((char*)lptr, "optional", 8) == 0)
                            sc_require_newdecls = 0;
                        else
                            error(146);
                        lptr = (unsigned char*)strchr(
                            (char*)lptr,
                            '\0'); /* skip to end (ignore "extra characters on line") */
                    } else if (strcmp(str, "tabsize") == 0) {
                        cell val;
                        preproc_expr(&val, NULL);
                        sc_tabsize = (int)val;
                    } else if (strcmp(str, "unused") == 0) {
                        char name[sNAMEMAX + 1];
                        size_t i;
                        int comma;
                        symbol* sym;
                        do {
                            /* get the name */
                            while (*lptr <= ' ' && *lptr != '\0')
                                lptr++;
                            for (i = 0; i < sizeof name && alphanum(*lptr); i++, lptr++)
                                name[i] = *lptr;
                            name[i] = '\0';
                            /* get the symbol */
                            sym = findloc(name);
                            if (sym == NULL)
                                sym = findglb(name);
                            if (sym != NULL) {
                                sym->usage |= uREAD;
                                if (sym->ident == iVARIABLE || sym->ident == iREFERENCE ||
                                    sym->ident == iARRAY || sym->ident == iREFARRAY)
                                    sym->usage |= uWRITTEN;
                            } else {
                                error(17, name); /* undefined symbol */
                            }
                            /* see if a comma follows the name */
                            while (*lptr <= ' ' && *lptr != '\0')
                                lptr++;
                            comma = (*lptr == ',');
                            if (comma)
                                lptr++;
                        } while (comma);
                    } else {
                        error(207); /* unknown #pragma */
                    }
                } else {
                    error(207); /* unknown #pragma */
                }
                check_empty(lptr);
            }
            break;

 

«Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон

Оставляй отзывы,
получай деньги!

Перейти на Otzovik
  • Ответов 0
  • Создана
  • Последний ответ

Топ авторов темы

Популярные дни

Топ авторов темы

Популярные дни

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

💼

Зарабатывай с Work-Zilla!

Выполняй задания и получай деньги

Да!


  • Текущие цели пожертвования

    • Пожертвовано 0 ₽ из 30 000 ₽
  • Лучшие авторы

  • Последние достижения

    • Ancor повысил звание
      Веселый Роджер
    • Darya получил значок
      Первые шаги
    • Darya получил значок
      Первые шаги
    • Darya получил значок
      Первые шаги
    • Darya получил значок
      Первые шаги
×
×
  • Создать...