Запитання з тегом «c-preprocessor»

Текстовий макропроцесор, застосований перед компіляцією програм на мовах C і C ++. Цей тег також може бути використаний для запитань щодо інших компіляторів / мов, похідних або які мають однакові функції, наприклад, #directives в Objective-C або C #.

7
Навіщо визначати макрос лише якщо він ще не визначений?
У всій нашій базі коду С я бачу, що кожен макрос визначається наступним чином: #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 …


4
Як використовувати аргумент Macro як рядковий літерал?
Я намагаюся зрозуміти, як написати макрос, який передаватиме як функцію рядкового літерального подання імені змінної разом із самою змінною. Наприклад, задана наступна функція. void do_something(string name, int val) { cout << name << ": " << val << endl; } Я хотів би написати макрос, щоб я міг зробити це: …

1
Що робить ## (подвійний хеш) у директиві препроцесора?
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; Наведений вище рядок взятий з Unreal 4, і я знаю, що міг би задати його на нереальних форумах, але я думаю, що це загальне запитання на C ++, яке вимагає тут. Я розумію, що перший рядок визначає макрос, однак я погано розбираюся в попередніх …

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 …


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

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

7
Розуміння макросу container_of у ядрі Linux
Коли я переглядав ядро ​​Linux, я знайшов container_ofмакрос, який визначається наступним чином: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) Я розумію, що робить container_of, але що я не розумію, це останнє речення, яке є (type …


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 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.