C/C++における、プリプロセッサとコンパイラ。
わたしはC/C++のプリプロセッサがどうも好きになれなくて。より正しくは、プリプロセッサのある種の書き方がすきになれなくて。
いわゆる、こういう書き方。
void foo() { #ifdef DEBUGGING デバッグのときだけほしいコード #endif 有効コード if(hoge) { 有効コード #ifdef DEBUGGING デバッグのときだけほしいコード #endif } 有効コード #ifdef DEBUGGING デバッグのときだけほしいコード #endif }
基本的にコードを読みにくくするものが嫌い、というのと、コンパイルされないコードがあることが好きになれない理由です。
こういう↓書き方もあるんですが、これも見た目違和感があって好きになれず。コンパイルされないコードがあるのは一緒ですし。
#ifdef DEBUGGING #define DEBUG_CODE(a) a #else #define DEBUG_CODE(a) #endif DEBUG_CODE(デバッグのときだけ欲しいコード)
コンパイラにすべて任せてしまって、最適化によって無用なコードが消えるのを期待するのがいいと思うんですけどねぇ。どちらの状況でも常にすべてコンパイルされますし(賢いコンパイラの場合、今度は警告がうるさかったりしますが)。
const bool Debugging = #ifdef DEBUGGING true; #else false; #endif if(Debugging) { デバッグのときだけ欲しいコード }
今日、仕事で、こういったデバッグ用コードで倍にもふくれたコードを見てしまったもので。