C-Preprocessor – вопросы и ответы

49
голосов
2
ответа
Мне нужно написать макрос, который автоматически генерирует функцию, которая пересылает все аргументы другой (членной) функции. Мне нужно, чтобы упростить написание JNI-клея в случае, если вам нужн...
7 лет, 4 месяца назад Pavel
60
голосов
2
ответа
Я использую Visual Studio 2010 (запись C++) и изолировал исключение, исходящее от вызова функции #define. Определенная функция немного сложна, и я хотел бы пропустить ее с помощью отладчика, чтобы ...
6 лет, 8 месяцев назад A.E. Drew
61
голос
1
ответ
В сущности, я хочу написать MACRO(a, b, c) и это приведет к "a","b","c" Я попытался использовать #__VA_ARGS__ , но в результате получается одна строка, содержащая все аргументы: "a, b, c" что я не ...
1 год, 8 месяцев назад user697683
61
голос
2
ответа
Вот мой сценарий: у меня есть набор исходных файлов, которые я бы предпочел не изменять, но я хотел бы заменить некоторые строковые литералы другими значениями. Вот пример: #define "oldString" "new...
9 лет, 2 месяца назад Freerobots
60
голосов
2
ответа
Я пытаюсь написать макрос препроцессора C для LLVM, который используется как: vc(@"Browser") и расширяется до: [[BrowserViewController alloc] initWithNibName:@"BrowserViewController" bundle:nil] Лу...
7 лет назад lms
106
голосов
4
ответа
Если мы хотим использовать пользовательский ввод для выполнения чего-либо в программе или распечатать результат, нам нужно #include <iostream> иначе cout и cin не будут признаны компилятором....
3 года назад Mario Zelic
50
голосов
4
ответа
Скажем, существует тип данных, определенный как таковой: typedef int my_integer_type; Где-то в другом месте существует такой код #define MAX_MY_INTEGER_TYPE 0xFFFFFFFF Однако, если my_integer_type ...
6 лет, 1 месяц назад Adam S
-7
голосов
1
ответ
Хотите знать, как "11" является ответом этой инструкции препроцессора c: #define SQR(x) x*x int main() { SQR(2+3); }
3 года, 12 месяцев назад vamosfener
91
голос
2
ответа
У меня есть макрос для повторения макросов, которые я использую для заполнения массивов со значениями по умолчанию во время компиляции: const int array [512] = { MACRO_REPEAT(512, -2) // this repea...
3 года, 7 месяцев назад rnunes
61
голос
1
ответ
У меня есть быстрый вопрос. Я использую этот макрос для создания нового массива: #define NEW_ARRAY(id,size) int id[size]={0,} Могу ли я сделать встроенную функцию, которая делает то же самое? (без ...
4 года, 11 месяцев назад DavS
93
голоса
4
ответа
У меня есть две библиотеки, и, к сожалению, они определяют два идентичных определения препроцессора (которые мне нужно использовать): lib1.h #define MYINT 1 lib2.h #define MYINT 2 В моей программе ...
1 год, 1 месяц назад DMan
93
голоса
4
ответа
У меня есть серия #defines из заголовка файла библиотеки этого типа: typedef int Lib_error; #define LIB_ERROR_A ((Lib_error) 0x0000) #define LIB_ERROR_D ((Lib_error) 0x0100) #define LIB_ERROR_F ((L...
7 лет, 8 месяцев назад user1394234
60
голосов
5
ответов
Я использую глобальный "config.h" в своем проекте для определения различных флагов, которые включают/отключают функции. Я определил использование соглашения: #define ENABLE_FEATURE1 0 // feature is...
8 лет, 3 месяца назад sashoalm
78
голосов
3
ответа
В чем преимущества и недостатки использования #define над const (и наоборот)? Когда я читал о плохой практике программирования, а именно о магических числах, я чаще использовал #define. Некоторые в...
6 лет, 3 месяца назад DarkPotatoKing
61
голос
1
ответ
В настоящее время я использую этот код в C++ для вызова указателя функции, если он не является нулевым (у меня есть несколько событий, таких как onCreate, onDestroy и т.д., Которые являются указате...
7 лет, 3 месяца назад kvanberendonck
49
голосов
2
ответа
У меня есть макрос, где я передаю аргумент и использую, чтобы определить новую переменную, основанную на имени ввода: #define DO_X(x) char _do_x_var_ ## x; /* other things */ Проблема в том, что ес...
9 лет, 3 месяца назад Brendan Long
69
голосов
1
ответ
В лучшем случае можно создать макрос препроцессора C++, который генерирует допустимый оператор #include , который впоследствии приведет к включению файла? пример #define MY_INCLUDE magic_goes_here ...
3 года, 5 месяцев назад Lennart Rolland
61
голос
2
ответа
Здесь ситуация: У меня есть три файла: Test1.cpp и Test2.cpp. Test1.cpp может быть скомпилирован как-есть в автономное приложение. Test1.cpp также содержит некоторые функции, которые я хотел бы пов...
9 лет, 4 месяца назад rnorris
-6
голосов
3
ответа
Я пытаюсь использовать #define в программном коде, аналогичном этому примеру (просто в кости): #define M 20 #define N 10 void foo(int *a) { if (a == M) { printf("Hello!\n"); } else if (a == N) { pr...
5 лет, 10 месяцев назад SeagulFish
61
голос
2
ответа
Я изучаю исходный код SQLite (в с), но есть некоторые вещи, которые я не могу понять, каковы они, и я надеюсь, что вы можете дать мне руку. Я знаю c, c++ и основы JAVA, но я никогда не видел ничего...
4 года, 5 месяцев назад algolejos
71
голос
2
ответа
Ошибка gcc-4.4 заставляет директиву #ident выдавать предупреждение. Мы не разрешаем предупреждения в нашем компиляторе (-Werror), поэтому мне нужно отключить их при компиляции в некоторых версиях к...
8 лет, 4 месяца назад phord
60
голосов
1
ответ
Я хочу добиться того же эффекта, что и gcc -dM -E - < /dev/null (как описано здесь ), но для nvcc. То есть, я хочу сбросить все препроцессоры nvcc. Увы, nvcc не поддерживает -dM . Что мне делать...
5 лет, 1 месяц назад einpoklum
60
голосов
1
ответ
По сути, я получил четыре случая в существующем коде: макрос ABC не работает макрос ABC установлен, но пуст: #define ABC или -DABC макрос ABC установлен и имеет значение true: #define ABC 1 или -DA...
6 лет, 4 месяца назад kay
92
голоса
2
ответа
Я надеюсь, что с тобой все в порядке. У меня есть файл version.h, содержащийся в 5 файлах.c. Когда я скомпилирую, у меня есть 5 предупреждений: version.h: 10: 2: предупреждение: - SUB_VERSION2 vers...
3 года назад ruxob
61
голос
3
ответа
У меня есть простая программа для вычисления N-королевы. Я распараллеливал его с помощью OpenMP. Теперь я хочу выполнить как серийные, так и параллельные версии и вычислить скорость. Дело в том, чт...
6 лет, 2 месяца назад user4910881
50
голосов
5
ответов
В моем коммутаторе я хочу, чтобы случаи делались от 0 до ( number_of_cases-1 ), не записывая номера самостоятельно. Так что, если я удалю один блок case в середине, следующие случаи будут перенумер...
7 лет, 9 месяцев назад Jakub Fojtik
97
голосов
3
ответа
Есть ли #define в С#, который позволяет мне знать во время компиляции, если я компилирую для x86 (Win32) или x64 (Win64)?
11 лет назад user62572
86
голосов
1
ответ
UBSAN жалуется на неопределенное поведение при запуске утилиты antiword : runtime error: left shift of 1 by 63 places cannot be represented in type 'time_t' (aka 'long') Ошибка вызывается макросами...
2 года, 10 месяцев назад Jeroen
50
голосов
3
ответа
Я просто прочитал статью "Идиоматическое программирование" и попытался подчеркнуть важную концепцию: язык не должен диктовать, как вы решаете проблему, а вы должны диктовать, как язык должен решить...
8 лет назад IAE
79
голосов
0
ответов
#include <curses.h> #include <Windows.h> int main(){ return -2; } Когда я скомпилирую это, ошибки не возникает. Если я поменяю позиции #include <curses.h> и #include <Windows.h...
3 года, 4 месяца назад SergeantPenguin
71
голос
1
ответ
У меня есть некоторая шаблонная функция, которая имеет различное количество аргументов из-за типа шаблона. Эта функция завернута с определением макроса. #define SomeTemplate(TemplateType, Arguments...
9 лет, 8 месяцев назад Ockonal
77
голосов
1
ответ
есть ли способ, которым я могу достичь этого #define MAC(VAL , num) #ifndef VAL \ int #VAL = num ; \ #define VAL \ #else \ #VAL = num ; \ #endif \ Я хочу определить VAL только один раз
3 года, 9 месяцев назад Kumaran Ida
98
голосов
1
ответ
В связи с моим вопросом Альтернатива расширению шаблонов в инструкции switch , пытаясь заставить Boost.Preprocessor выполнять вложенное взаимодействие над последовательностью. #include <boost/pr...
3 года, 11 месяцев назад Roger Leigh
77
голосов
1
ответ
Учитывая ниже, как я могу получить что-то, что дает ONE TWO THREE ? Я не могу понять, что положить ?? чтобы обеспечить предполагаемое поведение concat. Вы не можете #define одно пространство. #incl...
1 год, 4 месяца назад Carbon
60
голосов
1
ответ
Я хотел бы сгенерировать имя переменной, которые являются уникальными (для этого я использую __LINE__ ), и это имя должно упоминаться позже в нескольких строках. На определенной строке, например ст...
1 год, 10 месяцев назад foresightyj
92
голоса
1
ответ
Макрос - это препроцессор. Иногда мы устанавливаем вещи правильно, иногда мы этого не делаем. Было бы неплохо время от времени разворачивать макрос и видеть, как он работает?
8 лет, 4 месяца назад J. Chang
198
голосов
10
ответов
Это несколько вопросов для одной и той же инструкции предварительной обработки. 1 - < > или ""? Помимо информации, найденной в MSDN: # включить директиву (C-С++) 1.a: Каковы различия между дв...
11 лет, 4 месяца назад paercebal
60
голосов
1
ответ
Ссылка rvalue может быть сформирована с использованием альтернативного токена: int and i = 0; Он также может быть сформирован после сращивания физических линий источника с образованием логических с...
4 года, 1 месяц назад Trevor Hickey
51
голос
1
ответ
Макросы подкачки, которые берут тип, довольно хорошо известны. #define SWAP(type, a_, b_) do { \ type SWAP, *a = &(a_), *b = &(b_); \ SWAP = *a; \ *a = *b; \ *b = SWAP; \ } while (0) также:
4 года, 11 месяцев назад ideasman42
70
голосов
4
ответа
Для проекта, над которым я работаю, я использую магические числа. Этот макрос используется для определения одного #define BOOTSIGNATURE 0xAA55 Однако, когда я HEXDUMP в конечном файле, где он долже...
7 лет, 3 месяца назад Max Snijders
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема