[sugj-free:3283] おもしろい書き方
ribbongw master
ribbon @ ns.ribbon.or.jp
2008年 3月 14日 (金) 11:49:19 JST
Sambaに関する話題ですが、やや余談的なところもあるので、
こっちにします。
たまたま、Sambaのソースを見ていたんですが、
lib/debug.cのDebug1という関数の中に、こういうコードを見つけました。
771 #ifdef WITH_SYSLOG
772 if( !lp_syslog_only() )
773 #endif
774 {
775 if( !dbf ) {
776 mode_t oldumask = umask( 022 );
777
778 dbf = x_fopen( debugf, O_WRONLY|O_APPEND|O_CREAT, 0644 );
779 (void)umask( oldumask );
780 if( dbf ) {
781 x_setbuf( dbf, NULL );
782 } else {
783 errno = old_errno;
784 return(0);
785 }
786 }
787 }
788
ifdefで囲まれている部分、WITH_SYSLOGが定義されていないと、
if文が消えてなくなります。しかし、次の中括弧の部分は、
ifdefがあろうとなかろうと、ブロックとして有効なんですね。
効率的な書き方といえばそうなんですけどねえ...
こういう書き方、始めて見ました。
oota
sugj-free メーリングリストの案内