c-preprocessor- все статьи тега ➜ страница 2
Как написать цикл while с препроцессором C?
Я задаю этот вопрос с образовательной / хакерской точки зрения (я бы не очень хотел кодировать так). возможно ли реализовать цикл while только с помощью C директивы препроцессора. Я понимаю, что макросы не могут быть расширены рекурсивно, так как это будет сделано? ...
Можно ли перебирать аргументы в вариативных макросах?
мне было интересно, можно ли перебирать аргументы, переданные в вариационный макрос в C99 или используя любые расширения GCC ? например, можно ли написать общий макрос, который принимает структуру и ее поля, передаваемые в качестве аргументов, и печатает смещение каждого поля в структуре ? что-то вроде этого: struct a { int a; int b; int c; }; /* PRN_STRUCT_OFFSETS will print offset of each of the fields within structure passed as the first argument. */ int main(int argc, c ...
Что делает # # (двойной хэш) в директиве препроцессора?
#define DEFINE_STAT(Stat) struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; приведенная выше строка взята из Unreal 4, и я знаю, что могу задать ее на нереальных форумах, но я думаю, что это общий вопрос C++, который заслуживает того, чтобы его задавали здесь. Я понимаю, что первая строка определяет макрос, однако я не очень хорошо разбираюсь в препроцессорных махинациях в C++, и поэтому я потерялся там. Логика говорит мне, что обратная косая черта означает, что объявление пр ...
Как определить LLVM и его версию с помощью директив #define?
вопрос вполне понятен, я думаю. Я пытаюсь написать заголовок обнаружения компилятора, чтобы иметь возможность включать в приложение информацию о том, какой компилятор был использован и какая версия. это часть кода, который я использую: /* GNU C Compiler Detection */ #elif defined __GNUC__ #ifdef __MINGW32__ #define COMPILER "MinGW GCC %d.%d.%d" #else #define COMPILER "GCC %d.%d.%d" #endif #define COMP_VERSION __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__ #endif ...
Это С99 препроцессора полный Тьюринга?
после обнаружения повысить возможности препроцессора я обнаружил, что задаюсь вопросом: является ли препроцессор C99 Turing полным? Если нет, то чего ему не хватает, чтобы не квалифицироваться? ...
Понимание контейнера макросов в ядре 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 *)( (char *)__mptr - offsetof(type,member) );}) если мы используем макрос следующим образом: ...