3 ms·
> int a = f(); > if (a < 0) a = 0; > has been replaced with > const int a = MAX(0,f()); Going by MAX capitalization, it must be a macro, in which case the c
by eps 15y ago
> int a = f();
> if (a < 0) a = 0;
> has been replaced with
> const int a = MAX(0,f());
Going by MAX capitalization, it must be a macro, in which case the code is wrong. I am guessing this is a synthetic example, but still - try and get the basics right.
- evincarofautumn 15y agoTechnically, the code is wrong only if f() is not pure.
- eps 15y agoYes, I know, but there is no way to enforce it. This a classic "noob" mistake with macros - using a macro argument more than once.
- dkersten 15y agoThat's why in C++ people seem to generally recommend inline functions instead. Not only do the arguments only get evaluated once, but the whole thing is type safe too. Of course, people still misuse macros.
- CGamesPlay 15y agoI feel pretty safe assuming a pure function in a blog post about the advantages of immutability, really.
- kmm 15y agoWith GCC specifics, you can define MAX as a macro without calling the function twice. #define max(a,b) \ ({ typeof (a) _a = (a); \ typeof (b) _b = (b); \ _a > _b ? _a : _b; })