[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 メーリングリストの案内