Showing posts with label Computers. Show all posts
Showing posts with label Computers. Show all posts

05 November 2011

What the IF?

If you had these both if conditions, what would you choose to put in your code?

The one:
if(rc == STATUS_SUCCESS)
{
    doSomething();
}

The other:
if(STATUS_SUCCESS == rc)
{
    doSomething();
}


Intuitively, the answer would be (rc == STATUS_SUCCESS), but! What if you forgot one = and wrote (rc = STATUS_SUCCESS) instead? This will be an assignment inside the condition, which will compile, but definitely not what you want to. Now look at the the second option, if you wrote (STATUS_SUCCESS = rc), this will not compile (since STATUS_SUCCESS  is a const) and you'll know you've a bug in compilation.

Note1: you may say: it's not gonna happen to me, I won't forget that =. But believe me, you will forget it and if you didn't go with the second option, you'll be up all night searching for that = (like I did).
Note2: using a Static Analysis Tools (aka Lint-like tools) can expose an assignment within an if-condition warning.

19 October 2011

Threads Question

I heard a question this week, and I thought it would be nice sharing it here, I did solve it, however, I'm not 100% sure I did it right :), so here it is:
What is the maximum value the variable i can get in each case below, assuming that it's a global int initialized by zero (int i=0) and the code in each case is running on 2 threads?

case1:
while(i < 1000)
{
    i++;
}
case2:
while(i < 1000)
{
    ++i;
}

case3:
while(i++ < 1000);

case4:
while(++i < 1000);

10 June 2011

Ethernet packet generator: packEth


Recently at work, I had to debug some Tx flows for transmitting Ethernet packets, and pings didn't help since I needed to build a specific packet with some parameters. After searching the web I found this tool called pachEth, which allows you to simply build 802.3, ver II and 802.1q packets and transfer them using interfaces supports Ethernet in your machine.

S&M (Simple and Main, not this S&M)