Articles of macros

Macros C e uso de argumentos entre parênteses

Exemplo #define Echo(a) a #define Echo(a) (a) Eu percebo que provavelmente não há uma diferença significativa aqui, mas por que você iria querer include o dentro dos parênteses dentro do corpo macro? Como isso altera isso?

Quando foi a macro NULL não 0?

Eu me lembro vagamente de ler sobre isso há alguns anos, mas não consigo encontrar nenhuma referência na internet. Você pode me dar um exemplo em que a macro NULL não se expandiu para 0? Editar para maior clareza: Hoje ele se expande para ((void *)0) , (0) ou (0L) . No entanto, havia arquiteturas […]

C Definição de macro para determinar a máquina big endian ou little endian?

Existe uma definição de macro de uma linha para determinar o endianness da máquina. Estou usando o código a seguir, mas convertê-lo em macro seria muito longo. unsigned char test_endian( void ) { int test_var = 1; unsigned char test_endian* = (unsigned char*)&test_var; return (test_endian[0] == NULL); }

C macro de várias linhas: do / while (0) vs bloco de escopo

Duplicatas possíveis: Qual é a utilidade de fazer while (0) quando definimos uma macro? Por que existem, por vezes, instruções do / while e if / else sem sentido em macros C / C ++? do {…} while (0) para que serve? Eu vi algumas macros C multi-line que são empacotadas dentro de um loop […]

Os typedef e # definem o mesmo em c?

Gostaria de saber se typedef e #define são os mesmos em c ?

Uso no mundo real de X-Macros

Eu acabei de aprender sobre o X-Macros . Que usos do mundo real do X-Macros você viu? Quando eles são a ferramenta certa para o trabalho?

Qual é a utilidade de fazer while (0) quando definimos uma macro?

Duplicar Possível: Declarações Do-While e if-else em macros C / C ++ Estou lendo o kernel do Linux e encontrei muitas macros como esta: #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) Por que eles usam isso em vez de defini-lo simplesmente em {}?

Sobrecarregando a macro no número de argumentos

Eu tenho duas macros FOO2 e FOO3 : #define FOO2(x,y) … #define FOO3(x,y,z) … Eu quero definir uma nova macro FOO seguinte forma: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) Mas isso não funciona porque as macros não sobrecarregam o número de argumentos. Sem modificar o FOO2 e o FOO3 , existe alguma maneira de definir […]

Criando macro C com ## e __LINE__ (concatenação de token com macro de posicionamento)

Eu quero criar uma macro C que cria uma function com um nome baseado no número da linha. Eu pensei que poderia fazer algo como (a function real teria instruções dentro das chaves): #define UNIQUE static void Unique_##__LINE__(void) {} O que eu esperava expandir para algo como: static void Unique_23(void) {} Isso não funciona. Com […]

A necessidade de parênteses em macros em C

Eu tentei jogar com a definição da macro SQR no seguinte código: #define SQR(x) (x*x) int main() { int a, b=3; a = SQR(b+5); // Ideally should be replaced with (3+5*5+3), though not sure. printf(“%d\n”,a); return 0; } Imprime 23 . Se eu alterar a definição da macro para SQR(x) ((x)*(x)) , a saída será […]