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

152
Как дважды объединить с препроцессором C и развернуть макрос как в «arg ## _ ## MACRO»?

Я пытаюсь написать программу, в которой имена некоторых функций зависят от значения определенной макропеременной с помощью макроса: #define VARIABLE 3 #define NAME(fun) fun ## _ ## VARIABLE int NAME(some_function)(int a); К сожалению, макрос NAME()превращает это в int some_function_VARIABLE(int a);...

151
Стандартная альтернатива трюку GCC ## __ VA_ARGS__?

Существует известная проблема с пустыми аргументами для вариационных макросов в C99. пример: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); Использование BAR()вышеупомянутого действительно неверно в соответствии со...

145
Каково назначение одного знака фунта / хеша (#) на отдельной строке в препроцессоре C / C ++?

Я просматривал исходный код библиотек Boost и заметил, что часто встречаются знаки с одним фунтом без каких-либо прикрепленных к ним директив препроцессора. Я прочитал руководство по препроцессору GCC и руководство по спецификации и ничего не могу найти по этому поводу. (1) #ifndef BOOST_CONFIG_HPP...

125
Что лучше использовать #define, enum или const?

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

124
Как мне показать значение #define во время компиляции?

Я пытаюсь понять, какую версию Boost использует мой код. Я хочу сделать что-то вроде этого: #error BOOST_VERSION но препроцессор не расширяет BOOST_VERSION. Я знаю, что могу распечатать его во время выполнения из программы, и я знаю, что могу посмотреть на вывод препроцессора, чтобы найти ответ. Я...

115
Как определить платформу / компилятор из макросов препроцессора?

Я пишу кросс-платформенный код, который должен компилироваться в Linux, Windows, Mac OS. В Windows я должен поддерживать Visual Studio и Mingw. Есть некоторые фрагменты кода для конкретной платформы, которые я должен поместить в #ifdef .. #endifсреду. Например, здесь я разместил специальный код для...

112
#ifdef vs #if - что лучше / безопаснее как метод включения / отключения компиляции определенных участков кода?

Это может быть вопросом стиля, но в нашей команде разработчиков есть некоторые разногласия, и мне было интересно, есть ли у кого-нибудь еще какие-нибудь идеи по этому поводу ... По сути, у нас есть некоторые отладочные операторы печати, которые мы отключаем во время нормальной разработки. Лично я...

111
Какой предопределенный макрос я могу использовать для обнаружения лязга?

Я пытаюсь определить компилятор, использованный для компиляции моего исходного кода. Я легко могу найти предопределенные макросы для проверки MSVC или GCC ( например, см. Http://predef.sourceforge.net/ ), но я не могу найти ни одного макроса для проверки на наличие clang. Кто-нибудь знает,...

110
Номер строки C / C ++

Могу ли я получить номер строки в компиляторах C / C ++ в целях отладки ? (стандартный способ или специальные способы для определенных компиляторов) например if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic...

105
Может ли gcc выводить код C после предварительной обработки?

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

104
Запятая в макросе C / C ++

Скажем, у нас есть такой макрос #define FOO(type,name) type name Что мы могли бы использовать как FOO(int, int_var); Но не всегда так просто: FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2 Конечно, мы могли: typedef std::map<int, int>...

101
Макрос против функции в C

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

100
Роль #ifdef и #ifndef

#define one 0 #ifdef one printf("one is defined "); #ifndef one printf("one is not defined "); Какова в этом роль #ifdefи #ifndefи каков результат?

100
Препроцессор C ++ __VA_ARGS__ количество аргументов

Простой вопрос, на который я не нашел ответа в сети. В макросах с переменными аргументами, как найти количество аргументов? Я согласен с препроцессором ускорения, если у него есть решение. Если это имеет значение, я пытаюсь преобразовать переменное количество аргументов макроса, чтобы увеличить...

100
Как определить символ препроцессора в Xcode

Можно ли установить символ для условной компиляции, настроив свойства в проекте Xcode? Моя цель - создать символ, доступный для всех файлов, без необходимости использования импорта / включения, чтобы набор общих классов мог иметь особое поведение в некоторых проектах. Как следующие, но с моими...