Описание тега stringification
Строковая установка относится к использованию оператора `#` в макросе препроцессора **C** для использования аргумента как строки. Точно так же оператор препроцессора `##` может использоваться для объединения двух аргументов, и этот тег также может использоваться.
2
ответа
Могу ли я использовать вставку токенов и / или строковое форматирование для #include?
Допустим, у меня есть несколько файлов с одинаковыми именами: Foo1Bar.h, Foo2Bar.h, Foo3Bar.hи т. д. и т. д. Теперь я хочу автоматически включить те в некоторых main.c в стиле "плагин", то есть я не хочу помнить #include каждый. Возможно ли это сдел…
11 фев '16 в 18:02
1
ответ
Можно ли обработать математические вычисления перед тем, как максимизировать макрос?
Я просматриваю много примеров в Интернете о строжайшей макросов, но не могу найти что-то подобное. В настоящее время у меня есть определения, как показано ниже. #define PIN_A (0+1) #define PIN_B (0+2) #define PIN_C (0+3) #define str(x) #x #define xs…
14 авг '18 в 00:20
0
ответов
Как объединить строки в операторе #include
Как объединить две строки в операторе включения? Я попробовал код ниже - и тоже без ## - но оба раза только BASE_DIR часть была выведена препроцессором. #define BASE_DIR "../Source/micropython/" /* Assume this file is in ATI_micropython/Headers */ #…
04 фев '18 в 22:43
7
ответов
Что за # при форматировании с использованием%s
Я наткнулся на этот пример утверждения и мне было интересно, что # для: #define ASSERT( x ) if ( !( x ) ) { \ int *p = NULL; \ DBGPRINTF("Assert failed: [%s]\r\n Halting.", #x); \ *p=1; \ }
18 мар '11 в 15:58
1
ответ
Почему `eq` не работает, если один аргумент перегружен строкой?
Я понял (трудный путь), что оператор eq выдает фатальную ошибку времени выполнения, когда один из операндов является объектом с перегруженной строковой спецификацией. Вот минимальный пример: my $test = MyTest->new('test'); print 'yes' if $test eq…
01 май '14 в 11:51
2
ответа
Макрос переводит идентификатор предыдущего макроса вместо его замены
Почему inner_LOAD_ATOM(buffer, ATOM_MAX) конвертировано в scanf("%" "ATOM_MAX" "s", x) но завернутая версия не так? Я ожидал, что ATOM_MAX(идентификатор) будет заменен на 10, прежде чем он будет "передан" inner_LOAD_ATOM или же LOAD_LINE и делает об…
07 фев '17 в 22:39
1
ответ
Задержка строкового преобразования без расширения макроса
Можно ли изменить следующий фрагмент кода, чтобы предотвратить печать #pragma GCC warning от изменения, если какой-либо из токенов идентификатора в deprecation_message определяются как объектно-подобные макросы в точке, где dmacro расширяется, сохра…
28 сен '16 в 15:46
3
ответа
Почему достаточно? (хранение int в массиве char)
В одном из ответов (и его комментариев) на Как преобразовать int в строку в C дано следующее решение char str[ENOUGH]; sprintf(str, "%d", 42); в комментариях caf упоминается, что ENOUGH можно определить во время компиляции с помощью: #define ENOUGH …
15 сен '14 в 13:05
4
ответа
Расшифровка препроцессорного оператора
Может ли кто-нибудь помочь мне расшифровать следующее заявление препроцессора. #define ALLOC(x,y) x _##y; x* y = &_##y; Я знаю, что здесь делается некоторое выделение памяти для некоторой переменной y типа x. Но я не уверен, какова цель ## в при…
17 янв '11 в 14:21
3
ответа
Макрос Stringify с GNU Gfortran
Как я могу преобразовать макрос препроцессора в GNU gfortran? Я хотел бы передать определение макроса в GNU gfortran, который затем будет использоваться в качестве строки в коде. По сути, я хотел бы сделать это: program test implicit none character …
27 июл '15 в 09:38
0
ответов
C# Универсальный способ структурирования массивов структур
Я искал довольно долгое время, но я не смог найти, как в общем случае привести в порядок массив структур в C# во время выполнения. Допустим, у меня есть public enum FieldInfoType { FitUInt32, FitStruct, FitUint32Array1D, FitUint32Array2DAs1D, FitStr…
25 июл '16 в 16:12
3
ответа
Cpp: Как понять и / или отладить сложные макросы?
Я пытаюсь выучить приемы препроцессора, которые мне показались не такими простыми ( Можем ли мы иметь рекурсивные макросы?, Есть ли способ использовать строковое преобразование C++ для аргументов переменных макросов?, Препроцессор C++ __VA_ARGS__ ко…
12 янв '19 в 09:20
1
ответ
Что делает Any.match?
У него обманчиво простой код: method match(Any:U: |) { self.Str; nqp::getlexcaller('$/') = Nil } Тем не менее, это поведение, которое оно имеет: (^3).match(1) # OUTPUT: «「1」» Все идет нормально. say (1,3 ... * ).match(77); # OUTPUT: «Nil» Ooookey.…
22 фев '19 в 06:32
2
ответа
Предварительная обработка #define
Я не могу понять, как работает препроцессор и что ## обозначает в этом конкретном примере #include <stdio.h> #define TEMP_KEY(type,Key) (TEMP_##type | Key) enum TEMPKey_Type { TEMP_UNKNOWN = 0, TEMP_SPECIAL , TEMP_UNICODE }; enum Actual_Key { …
16 фев '11 в 15:40
6
ответов
Странное определение в препроцессоре C++
Я сталкивался с этим #define DsHook(a,b,c) if (!c##_) { INT_PTR* p=b+*(INT_PTR**)a; VirtualProtect(&c##_,4,PAGE_EXECUTE_READWRITE,&no); *(INT_PTR*)&c##_=*p; VirtualProtect(p,4,PAGE_EXECUTE_READWRITE,&no); *p=(INT_PTR)c; } и все понят…
17 авг '11 в 11:03
2
ответа
Изменение кода на стороне хоста для openCL C++ после строкового кода ядра
Я работаю над проектом, в котором я использую привязки openCL C++. У меня есть файл kernel.cl, который читается со стороны хоста, загружается и выполняется. Но теперь я хочу встроить его в мой файл.cpp, чтобы я мог распространять двоичный файл без ф…
12 окт '16 в 15:19
25
ответов
Какие уловки я могу использовать с макросами?
В нашем унаследованном коде, а также в нашем современном коде мы используем макросы для выполнения изящных решений, таких как генерация кода и т. Д. И мы используем как # а также ## операторы. Мне любопытно, как другие разработчики используют макрос…
16 мар '09 в 13:42
13
ответов
Какие приложения оператора ## препроцессора и ошибки должны быть рассмотрены?
Как упоминалось во многих моих предыдущих вопросах, я работаю через K&R; и в настоящее время работаю в препроцессоре. Одна из наиболее интересных вещей - то, чего я никогда раньше не знал ни по одной из моих предыдущих попыток изучать C, - это ## оп…
19 окт '08 в 19:51
1
ответ
Сложные однострочные определения условной контрольной суммы
Принимая этот код: typedef enum CHECKSUM { DENY = 0, ALLOW = 1 } checksum; #define terminal(x, str) static checksum* terminal_##x; { if(!strcmp(#str, "static")) { static checksum local = ALLOW; terminal_##x = &local; } else { checksum local = DE…
30 окт '14 в 21:09
5
ответов
Стрификация значения переменной
#define SATA_PORT_0 "/sata-ahci/port0" #define SATA_PORT_1 "/sata-ahci/port1" #define SATA_PORT_2 "/sata-ahci/port2" #define SATA_PORT_3 "/sata-ahci/port3" #define SATA_PORT_4 "/sata-ahci/port4" #define SATA_PORT_5 "/sata-ahci/port5" #define SATA_NO…
10 ноя '11 в 03:24