W poniższym przykładzie program drukuje najpierw i=1, później i=2. GCC sam dokonuje alokacji rejestrów oraz przeniesienia między rejestrami a zmienną i na stosie.

# include <stdio.h>

int main() { int i=0;

asm("movl $1, %0" : "=g" (i)); printf("i = %d\n", i); asm("addl $1, %0" : "+g" (i)); printf("i = %d\n", i); return 0; }

Makra o zmiennej liczbie argumentów Oprócz funkcji o zmiennej liczbie argumentów, deklarowanych np. int printf (const char *, ...); (gdzie ... oznacza zero lub więcej argumentów), GCC umożliwia tworzenie makr o zmiennej liczbie argumentów. Deklaruje je się tak samo jak funkcje:

# define printf(fmt, ...)

Aby użyć listy argumentów, należy użyć definiowanego wtedy makra __VA_ARGS__:

# define printf(fmt, ...) fprintf(stdout, fmt, __VA_ARGS__);

Zamiast __VA_ARGS__, zostaną wklejone argumenty, w formie:

0 argumentów 1 argument arg1 2 lub więcej argumentów arg1, arg2, arg3, arg4

Jednak, jak widać, jeśli makru printf podamy zero argumentów, po drugim argumencie funkcji fprintf zostanie sam przecinek. Będzie to błędem składniowym.