Nano Hash - криптовалюты, майнинг, программирование

Что такое оператор # в C?

Есть ли оператор '#' в C?

Если да, то в коде

enum {ALPS, ANDES, HIMALYAS};

что вернет следующее?

 #ALPS 

Ответы:


1

В языке C нет оператора #, но есть препроцессор (программа, которая обрабатывает #include и #define). Простой препроцессор превращает #ALPS в строку "ALPS".

Однако этот оператор stringify можно использовать только в директиве препроцессора #define. Например:

#define MAKE_STRING_OF_IDENTIFIER(x)  #x
char alps[] = MAKE_STRING_OF_IDENTIFIER(ALPS);

Препроцессор преобразует приведенный выше пример в следующий:

char alps[] = "ALPS";
31.10.2011
  • Ваш ответ мог бы быть более ясным: только #ALPS вызовет ошибку недействительной директивы предварительной обработки. Однако при использовании как: #define TEST(X) #X тогда TEST(ALPS) выведет "ALPS" . 31.10.2011
  • так сказать что-то эдакое char *s = #ALPS будет смысл ? 31.10.2011
  • @wormsparty: Спасибо, немного прояснил ответ. 31.10.2011
  • @ user772678: не совсем так. # используется только для специальных инструкций препроцессору, таких как #include, #define или #pragma. Он также используется в макросах, которые будут внутри оператора #define. Вы никогда не увидите, чтобы # использовалась как инструкция, не относящаяся к препроцессору. Единственный случай, когда вы могли бы увидеть char *s = #ALPS, был бы, если бы у вас был макрос вроде #define FOO(ALPS) { char* s = #ALPS; printf("%s", s); }. 31.10.2011
  • оператор stringify может использоваться только в директивах препроцессора верно, но не точно. Его можно использовать только в определениях макросов, а не в директивах препроцессора вообще, и только с именем аргумента макроса. 31.10.2011

  • 2

    В C нет оператора #. Префикс # используется для описания инструкций препроцессора.

    См.: http://en.wikipedia.org/wiki/C_preprocessor.

    31.10.2011

    3

    # используется для директив препроцессора, таких как #include и #define. Его также можно использовать внутри определений макросов для предотвращения раскрытия макросов.

    31.10.2011

    4

    Знак диез в C — это префикс директив препроцессора.

    Это не оператор...

    31.10.2011

    5

    "#" не является оператором в C. Но препроцессор (который работает до компилятора) предоставляет возможность для _ включения файлов заголовков: enter code here#include _ расширения макросов: **#define foo(x) bar x** _ условная компиляция :

    **#if DLEVEL > 5
        #define STACK   200
    #else
       #define STACK   50
        #endif
    #endif**
    

    В enum {ALPS, ANDES, HIMALYAS}; Ничто не вернет ALPS. Вы только что определили сильный целочисленный тип (ALPS = 0, ANDES = 1 and HIMALYAS = 2), но он бесполезен без имени для этого перечисления, например: enum mountain {ALPS, ANDES, HIMALYAS};

    27.12.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..