Вопросы с тегом «preprocessor»

1023
Почему препроцессор C интерпретирует слово «linux» как константу «1»?

Почему препроцессор C в GCC интерпретирует слово linux(маленькие буквы) как константу 1? test.c: #include <stdio.h> int main(void) { int linux = 5; return 0; } Результат $ gcc -E test.c(остановка после этапа предварительной обработки): .... int main(void) { int 1 = 5; return 0; } Что,...

788
Зачем использовать явно бессмысленные операторы do-while и if-else в макросах?

Во многих макросах C / C ++ я вижу код макроса, заключенный в нечто вроде бессмысленного do whileцикла. Вот примеры. #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else Я не вижу, что do whileделает. Почему бы просто не написать это без этого? #define FOO(X) f(X);...

734
#ifdef замена в языке Swift

В C / C ++ / Objective C вы можете определить макрос, используя препроцессоры компилятора. Кроме того, вы можете включать / исключать некоторые части кода, используя препроцессоры компилятора. #ifdef DEBUG // Debug-only code #endif Есть ли подобное решение в...

431
Почему все файлы C, написанные моим лектором, начинаются с одного # в первой строке?

Я просматриваю некоторые примечания к курсу Си, и каждый исходный файл программы на Си начинается с одного #в первой строке программы. Затем есть пустые строки, и после этого другие вещи, сопровождаемые mainфункцией. В чем причина #? (Сейчас истек срок, и я не могу спросить парня.) Вот пример: #...

319
Сочетание C ++ и C - как работает #ifdef __cplusplus?

Я работаю над проектом, в котором много унаследованного кода на Си . Мы начали писать на C ++ с намерением в конечном итоге также преобразовать устаревший код. Я немного озадачен тем, как взаимодействуют C и C ++. Я понимаю , что обертывание C кода extern "C"на C ++ компилятор не будет искажать C...

301
MIN и MAX в C

Где MINи MAXопределены в C, если вообще? Каков наилучший способ реализовать их как можно более обобщенно и безопасно? (Расширения / встроенные компиляторы для основных компиляторов...

249
Препроцессор дампа GCC определяет

На этот вопрос есть ответы на Переполнение стека на русском : Как узнать список всех определенных макросов? Есть ли способ для gcc / g ++ выгружать свои определения препроцессора из командной строки? Я имею в виду такие вещи , как __GNUC__, __STDC__и так...

241
Xcode / iOS: как определить, выполняется ли код в сборке DEBUG / RELEASE?

Я делаю приложение, которое обрабатывает конфиденциальные данные кредитной карты. Если мой код работает в режиме отладки, я хочу записать эти данные в консоль и сделать несколько дампов файлов. Однако в окончательной версии магазина приложений (то есть, когда он работает в режиме выпуска) важно,...

233
#pragma pack effect

Мне было интересно, может ли кто-нибудь объяснить мне, что #pragma packделает оператор препроцессора, и, что более важно, почему он захочет его использовать. Я проверил страницу MSDN , которая дала некоторое представление, но я надеялся услышать больше от людей с опытом. Я видел это в коде раньше,...

209
#define макрос для отладочной печати в C?

Попытка создать макрос, который можно использовать для отладочных сообщений печати, когда определен DEBUG, например, следующий псевдокод: #define DEBUG 1 #define debug_print(args ...) if (DEBUG) fprintf(stderr, args) Как это достигается с помощью...

196
Как сделать вариационный макрос (переменное число аргументов)

Я хочу написать макрос на C, который принимает любое количество параметров, а не конкретное число пример: #define macro( X ) something_complicated( whatever( X ) ) где Xлюбое количество параметров Мне это нужно, потому что whateverон перегружен и может вызываться с 2 или 4 параметрами. Я попытался...

195
Как проверить ОС с помощью директивы препроцессора?

Мне нужен мой код, чтобы делать разные вещи в зависимости от операционной системы, в которой он компилируется. Я ищу что-то вроде этого: #ifdef OSisWindows // do Windows-specific stuff #else // do Unix-specific stuff #endif Есть ли способ сделать это? Есть ли лучший способ сделать то же...

184
Перегрузка макроса по количеству аргументов

У меня есть два макроса FOO2и FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... Я хочу определить новый макрос FOOследующим образом: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) Но это не работает, потому что макросы не перегружают количество аргументов. Без изменения FOO2и FOO3,...