Articles of macros

Por que eu preciso de dupla camada de indireção para macros?

Em: C ++ FAQ – Problemas técnicos variados – [39.6] O que deve ser feito com macros que precisam colar dois tokens juntos? Alguém poderia me explicar por quê ? Tudo que eu li é confiar em mim , mas eu simplesmente não posso confiar em algo porque alguém disse isso. Eu tentei a abordagem […]

Escapar de um símbolo # em uma macro #define?

Sem entrar nos detalhes, quero usar uma macro #define que se expandirá para #include mas o sinal ‘#’ está confundindo o pré-processador (como ele acha que quero citar um argumento). Por exemplo, eu quero fazer algo assim: #define MACRO(name) #include “name##foo” E use assim: MACRO(Test) Que se expandirá para: #include “Testfoo” O humilde sinal # […]

Definições de macro C # no pré-processador

C # é capaz de definir macros como é feito na linguagem de programação C com instruções pré-processador? Gostaria de simplificar a digitação regular de certas instruções de repetição, como as seguintes: Console.WriteLine(“foo”);

Macros em Swift?

O Swift atualmente suporta macros ou existem planos futuros para adicionar suporte? Atualmente estou espalhando: Log.trace(nil, function: __FUNCTION__, file: __FILE__, line: __LINE__) Em vários lugares ao longo do meu código.

Macros do pré-processador recursivo Variadic – é possível?

Eu me deparei com um pequeno problema teórico. Em um pedaço de código que eu estou mantendo há um conjunto de macros como #define MAX_OF_2(a, b) (a) > (b) ? (a) : (b) #define MAX_OF_3(a, b, c) MAX_OF_2(MAX_OF_2(a, b), c) #define MAX_OF_4(a, b, c, d) MAX_OF_2(MAX_OF_3(a, b, c), d) …etc up to MAX_OF_8 O que […]

Como posso gerar valores exclusivos no pré-processador C?

Eu estou escrevendo um monte de macros pré-processador relacionados, um dos quais gera labels que o outro salta para. Eu os uso dessa maneira: MAKE_FUNNY_JUMPING_LOOP( MAKE_LABEL(); MAKE_LABEL(); ) Eu preciso de alguma maneira para gerar labels exclusivos, um para cada chamada interna MAKE_LABEL , com o pré-processador. Eu tentei usar __LINE__ , mas desde que […]

Como identificar plataforma / compilador de macros de pré-processador?

Eu estou escrevendo um código multi-plataforma, que deve compilar no linux, windows, Mac OS. No Windows, eu devo suportar visual studio e mingw. Existem algumas partes do código específico da plataforma, que eu deveria colocar no #ifdef .. #endif environment. Por exemplo, aqui eu coloquei o código específico do win32: #ifdef WIN32 #include #endif Mas […]

Posso redefinir uma macro C ++ e defini-la de volta?

Estou usando a biblioteca JUCE e vários headers Boost no meu código. Juce define “T” como uma macro (gemido) e Boost geralmente usa “T” em suas definições de modelo. O resultado é que, se você include de alguma forma os headers JUCE antes dos headers Boost, o pré-processador expande a macro JUCE no código Boost […]

Macro de tamanho de matriz que rejeita pointers

A macro padrão de tamanho de matriz que é frequentemente ensinada é #define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0])) ou alguma formação equivalente. No entanto, esse tipo de coisa sucede silenciosamente quando um ponteiro é passado e fornece resultados que podem parecer plausíveis em tempo de execução até que as coisas desmoronem misteriosamente. É muito fácil cometer […]

O que é “: – !!” no código C?

Eu esbarrei neste estranho código de macro em /usr/include/linux/kernel.h : /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used eg in a structure initializer (or where-ever else comma expressions aren’t permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) […]