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.