Результаты поиска по запросу "c-preprocessor"

1 ответ

Отличный ответ! Конечно, я многому научусь из этого. Спасибо!

приведен код hello.c: #include <stdio.h> int main (void) { printf ("Hello, world!\n"); return 0; }Я использовал командуgcc -E hello.c предварительно обработать его и получить следующий вывод: # 1 "hello.c" # 1 "<built-in>" # 1 "<command-line>" ...

0 ответов

Это не ответ на вопрос!

разница между макросом и функцией вC? Подскажите пожалуйста одно приложение, где я могу использовать макросы и функции?

1 ответ

Кроме того, отсутствие пространства имен препроцессора C означает, что такая система расширения макрокоманд не будет содержать. Нужно позаботиться о том, чтобы сгенерированные имена не мешали другим полезным макросам. В конце концов, вам, вероятно, не хватило бы памяти в препроцессоре для какого-либо значительного использования, поскольку препроцессор на самом деле не создан для хранения имени для каждого символа, преобразуемого в маркер «единицы», и имени для каждого «единичного» токена, сжимаемого в его окончательную десятичную запись.

жно ли реализоватьstrlen() вCпрепроцессор? Дано: #define MYSTRING "bob"Есть ли какой-то макрос препроцессора,Xчто позволило бы мне сказать: #define MYSTRING_LEN X(MYSTRING)

ТОП публикаций

2 ответа

живой пример на wandbox.org

аюсь структурировать подстановку (оценку) конкатенации макросов. Например: #include <stdio.h> #define FOO_ONE 12 #define FOO_TWO 34 #define BAR_ONE 56 #define BAR_TWO 78 #define MAKE_MAC(mac) // ... what to do here? void main(int argc, char ...

2 ответа

 это ключевое слово, а не макрос - его интерпретация не имеет ничего общего с препроцессором, поэтому не является исключением.

репроцессор, кажется, предполагает, что неопределенные константы равны 0 для оценки#if условия. Можно ли полагаться на это, или неопределенные константы дают неопределенное поведение?

3 ответа

 суффикс к вашему исходному файлу, чтобы получить эту поддержку. MSVC долгое время не обновлял свой C-интерфейс.

отрим этот код: #define F(x, ...) X = x and VA_ARGS = __VA_ARGS__ #define G(...) F(__VA_ARGS__) F(1, 2, 3) G(1, 2, 3)Ожидаемый результатX = 1 and VA_ARGS = 2, 3 для обоих макросов, и это то, что я получаю с GCC, однако, MSVC расширяет это ...

2 ответа

Просто переименуйте их в рекурсивный

ли написать#define это определяет#define? Например: #define FID_STRS(x) #x #define FID_STRE(x) FID_STRS(x) #define FID_DECL(n, v) static int FIDN_##n = v;static const char *FIDS_##n = FID_STRE(v)Но вместо этого: #define FID_DECL2(n, v) ...

0 ответов

или так.

ел бы написать макрос препроцессора, который делает одну вещь, если его аргумент представляет собой набор токенов в скобках, например: MY_MACRO((x, y))и еще что-то, если это просто один токен, например: MY_MACRO(x)Это возможно? Как насчет ...

4 ответа

Обычный if или токен потока управления if проверяет условие с переменными или возвращаемыми значениями функции. Эта проверка выполняется во время выполнения.

разница между директивой препроцессора#if и нормальноif вC? Я новичок вC.

0 ответов

 полезно.

ли в CUDA макрос компилятора #define (nvcc), который я могу использовать? (Как _WIN32 для Windows и т. Д.) Мне нужно это для кода заголовка, который будет общим для компиляторов nvcc и VC ++. Я знаю, что могу пойти дальше и определить свой ...