Arvorezinha – C Preprocessor
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 * ** *** **** *****
Acho mui interessante o conceito de printar *durante* a compilação, independentemente da lameness do código.
Tenho uma sugestão, podias fazer a arvorezinha só com templates em C++? A arvorezinha tem de ser criada em tempo de compilação.
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).