不违背语言逻辑的做法都是可行的。。。
像是这种情况,就不能用goto。
#include <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, TCHAR **argv)
{
if (argc >= 1) goto b;
int i = 1; // warning & assert fail
//string s = "aaa"; // compile error
b:
cout << i << endl;
return 0;
}
</iostream></string></tchar.h></windows.h>
微软那个可以用goto是因为变量声明和初始化都写在函数开头附近,不存在被跳过的问题。
一般来说,如果你习惯于C89风格的那种变量声明全部写在开头的做法,完全可以随意使用goto。但是如果你习惯于ISO C++风格的那种变量声明写在程序中间的做法,就应该考虑一下其它写法。比如你如果觉得do-while(0)-break太拽,完全可以换一种写法。
需要清理的资源变量声明;
{
不需要清理的变量声明;
可能失败的操作;
if (失败) goto 清理;
// ...
}
清理:
if (变量1需要清理)
清理变量1;
// ...
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |