前一阵子我改变了我处理c风格错误的方式.
我发现很多代码看起来像这样:
int errorCode = 0;
errorCode = doSomething();
if (errorCode == 0)
{
errorCode = doSomethingElse();
}
...
if (errorCode == 0)
{
errorCode = doSomethingElseNew();
}
Run Code Online (Sandbox Code Playgroud)
但最近我一直这样写:
int errorCode = 0;
do
{
if (doSomething() != 0) break;
if (doSomethingElse() != 0) break;
...
if (doSomethingElseNew() != 0) break;
} while(false);
Run Code Online (Sandbox Code Playgroud)
我已经看到很多代码在出现错误后没有执行任何内容,但它始终以第一种方式编写.有没有其他人使用这种风格,如果你不这样做,为什么?
编辑:只是为了澄清,通常这个构造使用errno否则我会int在打破之前将值赋值给.此外,通常还有更多代码,而不仅仅是if (error == 0 )子句中的单个函数调用.但是,要考虑很多好点.
如果我有一个带有实例方法和变量的类
class Foo
{
...
int x;
int bar() { return x++; }
};
Run Code Online (Sandbox Code Playgroud)
是否定义了返回后递增变量的行为?
我有一个在Linux上运行的Java应用程序,它有很多围绕时间和日期的事件和业务逻辑.
对于测试,是否有可能更快地调整某些东西.比方说,在一小时的墙上时间完成计算机一年的完成?
我一直在阅读并思考这个问题.嗡嗡声似乎是在多核未来,功能语言将变得更受欢迎.我是函数式编程的相对noob.我唯一的接触是学术性的,并没有足够的复杂性来真正让这类语言顺其自如.
因此,据我所知,纯函数可以轻松,透明地并行化.这是一个很棒的功能,因为它意味着编写线程代码没有麻烦.但是,它似乎没有给串行代码提供太多帮助.
Example:
fooN( ... (foo3(foo2(foo1(0)))))
Run Code Online (Sandbox Code Playgroud)
像这样的串行呼叫似乎是一个常见的,有时是不可避免的问题.对我来说,这些是并行化如此困难的根本原因.有些任务只是(或似乎是)高度连续的.拥有"功能性思维"是否可以让您更好地分解一些看似串行的任务?现有的任何功能语言是否提供透明机制以更好地并行化高度串行代码?最后,函数式语言本质上是否比OO或命令式语言更具可并行性,为什么?
我最近问的问题是返回x ++的行为; 界定?
结果是关于我的预期,但让我想到了类似的情况.
如果我要写
class Foo
{
...
int x;
int& bar() { return x++; }
};
Run Code Online (Sandbox Code Playgroud)
bar现在返回int引用,是否定义了此行为?如果上一个问题的答案确实是真的,而不仅仅是对正在发生的事情的方便抽象,那么看起来你会返回一个堆栈变量的引用,一旦执行返回就会被销毁.
如果它只是一个抽象,我有兴趣知道后增量实际上保证了什么行为.