Как отравить идентификатор в VC ++?

Функция отравления очень полезная техника в C ++.

В общем, это относится к созданию непригодной функции, например, если вы хотите запретить использование динамического выделения в программе, вы можете«Яд» функция malloc, поэтому ее нельзя использовать.'Отравление' идентификатор означает, что любая ссылка на идентификатор после «отравления» является серьезной ошибкой компилятора

Например (см. Живое демоВот)

#include <iostream>
#include <cstdlib>
#pragma GCC poison malloc
int main()
{
    int* p=(int*)malloc(sizeof(int));  // compiler error use of poisoned function malloc
    *p=3;
    std::cout<<*p<<'\n';
    free(p);
}

Я нашел эту технику очень полезной для предотвращения неправильного использования зарезервированных слов в C ++.

Например:

#include "test.h"            // contains definition of some class T
#pragma GCC poison private
#define private public      // oops compiler error use of poisoned identifier private in macro
int main()
{
        // Instantiate T & use it members
}

Это также может быть использовано в C для предотвращения использования ключевых слов C ++, потому что C ++ имеет много ключевых слов, чем C, и вполне допустимо использовать специфические для C ++ ключевые слова в качестве идентификатора в C.

Например (см. Живую демонстрациюВот)

#include <stdio.h>
#pragma GCC poison new
int main(void)
{
     int new=5;     // oops compiler error use of poisoned identifer new.
     printf("%d",new);
}

Но чтобы использовать это отравление, нам нужно использовать директиву pragma, которая определяется реализацией. К счастью, прагма GCC, признанная Clang & также хорошо работает. Но какая прагма нужна, если у меня есть компилятор VC ++ (Microsoft Visual studio). Как это сделать в компиляторе VC ++?

Ответы на вопрос(1)

Ваш ответ на вопрос