Op vrijdag 11 oktober 2024 21:44:55 schreef Schimanski:
de regel k = A > B ? A : B is een zg. compound statement.
Dit is de ternary operator. Een compound statement is een gecombineerde expressie en assignment, zoals x *= 2;
Zo'n macro is soms handig, en maakt code juist leesbaarder, als de naam duidelijk is en je het verder niet te complex maakt.
Dit in mijn beleving prima leesbaar:
Je moet wel bedenken dat een functie die je binnen de macro aanroept, 2 keer wordt uitgevoerd.
Dit zal niet het verwachte effect hebben:
In plaats van een random waarde beperkt tot 10, zul je nu random een andere random waarde krijgen (vaak groter dan 10), of de waarde 10.
Als je het zelf zou uitschrijven, zou je het resultaat van rand() ook eerst in een variabele stoppen, maar het zou dan direct duidelijk zijn waarom. Juist om dit soort dingen te voorkomen is het gebruikelijk om macro's helemaal met hoofdletters te schrijven, om ze te onderscheiden van reguliere functies. Ook zouden macro's hele simpele dingen moeten doen, als het groter of complexer wordt is het meestal beter om het gewoon in een functie te stoppen.
In plaats van een macro is een inline functie vaak een goed idee; dat werkt in principe zoals een functie, maar in plaats van een functie aanroep, met de overhead daarvan, wordt de inhoud van de functie op die plaats gekopieerd door de compiler. Dit is dus niet handig voor een functie die op veel plaatsen wordt gebruikt, maar vooral voor functies die op één of een paar plaatsen heel vaak wordt aangeroepen.
Dat zou dan dit worden
inline int Max( int a, int b )
{
if( a > b ) return a;
else return b;
}