Ken*_*eth 1 c goto switch-statement
我可以在 C 开关中使用类似 javas finally 子句的东西。我的大多数案例都有一组共享的功能,我想将其放在一个案例中。我正在考虑使用 goto 语句来实现这一点,充分了解 goto 代码混淆能力,将共享案例放在 switch 语句的底部似乎仍然是比将共享功能分区到单独函数中更“干净”的方法。
\n\n不管怎样,我一直在尝试做这样的事情:
\n\nswitch( x ) {\ncase 0:\n printf("Case 0\\n");\n goto case 2;\n break;\ncase 1:\n printf("Case 1\\n");\n goto case 2;\n break;\ncase 2:\n printf("Case 2\\n");\n break;\ndefault:\n // do nothing\n break;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是,使用 gcc 会失败并出现错误
\n\nerror: expected identifier or \xe2\x80\x98*\xe2\x80\x99 before \xe2\x80\x98case\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n关于如何使其发挥作用有什么建议吗?或者可能有更好的方法?
\n“最佳实践”当然是将共享代码委托给函数。但在某些情况下,这是过度设计的,或者根本不可能/不理想的,那么你可以这样做:
switch( x )
{
case 0:
printf("Case 0\n");
goto shared_material;
case 1:
printf("Case 1\n");
goto shared_material; // Unnecessary, but keep it for clarity.
case 2:
shared_material:
printf("Case 2\n");
break;
default:
// Write a meaningful error message somewhere
return -1;
}
Run Code Online (Sandbox Code Playgroud)
我不觉得这太难读,而且我对此没有任何问题,只要整个语句适合一个屏幕(否则它就相当于意大利面条代码)。但是,您可能必须在代码审查中捍卫它,这是我放弃此类构造并重新思考代码的主要原因之一。
| 归档时间: |
|
| 查看次数: |
7205 次 |
| 最近记录: |