让我们说:
switch( choice ) { case A: stmt; do_stmt_related2A; break; case B: stmt; do_stmt_related2B; break; case C: something_different(); ... }
如何避免重复stmt代码?
但是有没有解决办法?
gcc扩展标签作为值看起来相当不错的情况.
switch( choice ) { do { case A: ptr = &&A_label; break; case B: ptr = &&B_label; } while(0); stmt; goto *ptr; case C: ...
有什么技巧可以在ANSI-C中做同样的事情吗?
编辑:当然我已经想到了功能/宏/内联.但还有什么?
这不是关于性能.只是为了教育目的;)
解决方法
@H_301_18@ 为什么你不重构stmt(我假设这是一大块指令,而不是单行)到自己的函数do_stmt()并调用它?就像是:switch( choice ) { case A: do_stmt(); do_stmt_related2A; break; case B: do_stmt(); do_stmt_related2B; break; case C: something_different(); ... }
那个gcc的伎俩是真的很可怕.我宁愿在任何一天在这样的怪物上有可读的代码.
你应该总是认为继承你的代码的程序员是一个杀人的疯子谁知道你住的地方:-)