Mais um blog inútil.

Maio 6, 2009

Arvorezinha – C Preprocessor

Filed under: Arvorezinha — dongs @ 21:34

Aqui vai uma submissão ligeiramente lame da arvorezinha em C preprocessor. Infelizmente não descobri como concatenar os '*' (concatenar uma vez funciona com ##, mas a segunda vez não, dado que o preprocessor não avalia as expressões até o fim). Se alguém tiver sugestões, tomem a liberdade de as colocar nos comentários.

print.h:

#if i <= total
#if i > 0
#pragma message( STR )
#endif
#include "inc_i.h"
#include __FILE__
#endif

inc_i.h:

#if i == 0
#undef i
#define i 1
#undef STR
#define STR "*"
#elif i == 1
#undef i
#define i 2
#undef STR
#define STR "**"
#elif i == 2
#undef i
#define i 3
#undef STR
#define STR "***"
#elif i == 3
#undef i
#define i 4
#undef STR
#define STR "****"
#elif i == 4
#undef i
#define i 5
#undef STR
#define STR "*****"
#elif i == 5
#undef i
#define i 6
#undef STR
#define STR "******"
#endif

#undef j
#define j 0

test.cpp:

#define total 5
#define i 0
#define STR ""

#include "print.h"

O resultado é apresentado durante a compilação do test.cpp:

C:\>cl /c test.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

test.cpp
*
**
***
****
*****

3 comentários a “Arvorezinha – C Preprocessor”

  1. mirage diz:

    Acho mui interessante o conceito de printar *durante* a compilação, independentemente da lameness do código.

  2. Pedro diz:

    Tenho uma sugestão, podias fazer a arvorezinha só com templates em C++? A arvorezinha tem de ser criada em tempo de compilação.

  3. dongs diz:

    Já tinha pensado nisso, mas queria imprimir as estrelas como caracteres durante a compilação (usando e.g. erros, como o Unruh fez para gerar primos da mesma forma).

Leave a Reply for Pedro

widgeon
widgeon
widgeon
widgeon