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

Текстовый макропроцессор, применяемый перед компиляцией программ на языках C и C ++. Этот тег также можно использовать для вопросов о других компиляторах / языках, которые являются производными или имеют идентичные функции, такие как #directives в Objective-C или C #.

7
Зачем определять макрос, только если он еще не определен?
Я вижу, что во всей нашей базе кода C каждый макрос определяется следующим образом: #ifndef BEEPTRIM_PITCH_RATE_DEGPS #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #endif #ifndef BEEPTRIM_ROLL_RATE_DEGPS #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #endif #ifndef FORCETRIMRELEASE_HOLD_TIME_MS #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #endif #ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f #endif В чем смысл выполнения этих проверок определения вместо простого определения макросов? #define …

10
Как сравнивать строки в условных директивах препроцессора C
Мне нужно сделать что-то подобное в C. Это работает, только если я использую char, но мне нужна строка. Как я могу это сделать? #define USER "jack" // jack or queen #if USER == "jack" #define USER_VS "queen" #elif USER == "queen" #define USER_VS "jack" #endif

3
Объединить int в строку с помощью препроцессора C
Я пытаюсь понять, как я могу объединить #define'd int в #define' d строку с помощью препроцессора C. Мой компилятор - GCC 4.1 для CentOS 5. Решение также должно работать для MinGW. Я хотел бы добавить номер версии к строке, но единственный способ заставить его работать - это сделать копию номера …

13
Какие применения оператора препроцессора ## и какие ошибки следует учитывать?
Как упоминалось во многих моих предыдущих вопросах, я работаю через K&R, а сейчас занимаюсь препроцессором. Одна из наиболее интересных вещей - чего я никогда раньше не знал из своих предыдущих попыток изучить C - это ##оператор препроцессора. Согласно K&R: Оператор препроцессора ## предоставляет способ объединения фактических аргументов во время раскрытия …

19
Простой способ использовать переменные перечислимых типов в качестве строки в C?
Вот что я пытаюсь сделать: typedef enum { ONE, TWO, THREE } Numbers; Я пытаюсь написать функцию, которая будет выполнять случай переключения, подобный следующему: char num_str[10]; int process_numbers_str(Numbers num) { switch(num) { case ONE: case TWO: case THREE: { strcpy(num_str, num); //some way to get the symbolic constant name in …

3
Могут ли директивы препроцессора #if быть вложенными в C ++?
У меня вопрос о директивах препроцессора в c ++: Например: #ifndef QUESTION //some code here #ifndef QUESTION //some code here #endif #endif Можем ли мы использовать его таким образом, и может компилятор C ++ соответствовать ifndefи endifв правильном направлении?

2
Как именно работает трюк с двойной строкой?
По крайней мере, некоторые препроцессоры C позволяют вам преобразовать значение макроса в строку, а не его имя, передав его через один функционально-подобный макрос другому, который преобразовывает его в строку: #define STR1(x) #x #define STR2(x) STR1(x) #define THE_ANSWER 42 #define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */ Примеры использования здесь . Это работает, …



6
#ifdef внутри #define
Я пытаюсь написать что-то вроде этого: #define COV_ON(x) \ #ifdef COVERAGE_TOOL \ _Pragma (COVERAGE #x) #endif Есть ли способ дать COV_ONтакое определение ? Я знаю, что то, что я сделал выше, неправильно, так как я не могу использовать #ifdef#define. ( #не разрешенный символ в #define). Так есть ли решение?
83 c  c-preprocessor 

6
#define vs const в Objective-C
Я новичок в Objective-C, и у меня есть несколько вопросов относительно constдирективы предварительной обработки #define. Во-первых, я обнаружил, что невозможно определить тип константы с помощью #define. Это почему? Во-вторых, есть ли преимущества в использовании одного из них перед другим? Наконец, какой способ более эффективен и / или безопаснее?

4
Макросы многострочного препроцессора
Как сделать макрос многострочного препроцессора? Я умею составлять одну строчку: #define sqr(X) (X*X) но мне нужно что-то вроде этого: #define someMacro(X) class X : public otherClass { int foo; void doFoo(); }; Как я могу заставить это работать? Это только пример, настоящий макрос может быть очень длинным.
81 c++  c  c-preprocessor 


5
Считать строки исходного файла, используя макросы?
Возможно ли с помощью препроцессора C / C ++ подсчитать строки в исходном файле либо в макросе, либо в некотором виде, доступном во время компиляции? Например, я могу заменить MAGIC1, MAGIC2и MAGIC3в следующем, и получить значение 4 как-то при использовании MAGIC3? MAGIC1 // can be placed wherever you like before …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.