Macro DEBUG do pré-processador
Neste desafio, você não deve escrever uma função, mas sim duas macros de pré-processador C/C++. A ideia era ter apenas uma macro, mas, como não há acesso direto ao compilador nem aos arquivos-fonte, isso não foi possível.
De qualquer forma, essas macros devem ser macros simples de depuração. A primeira (DOUT) imprime/transmite a entrada que recebe para std::cout. A segunda (NDOUT) ignora toda a entrada e não faz nada.
Essas macros devem ser macros do tipo função. Cada uma recebe um argumento, que pode incluir operadores de fluxo ( operator<< ). Depois de cada uso dessas macros há um ponto e vírgula: DOUT( /* input */ );
Exemplos
DOUT( "Hello " << "World!" ); ➞ "Hello World!"
DOUT( 1 << '+' << 2 << '=' << 1+2 ); ➞ "1+2=3"
NDOUT( "Hello" << "World!" ); ➞ ""Notas
- Lembre-se de transmitir a saída para std::cout. Não use printf nem qualquer outra coisa. Não tente retornar uma string.
- Para distribuir as definições de macros em várias linhas, você pode usar barras invertidas
\como o último caractere de uma linha:
#define N \
123
std::cout << N << std::endl; // prints "123"Nada importante
Meu plano original era compilar condicionalmente a macro DOUT dependendo de DEBUG estar definido ou não ( ➞ #ifdef ... ). Como mencionado anteriormente, isso não era possível, pois não tenho acesso aos arquivos-fonte do seu código ou dos testes, nem ao próprio compilador. É por isso que você precisa implementar duas macros distintas, e não apenas uma.