13:31 door Anoniem: b kan een negatief getal zijn, en dan is het dus niet waar. Het statement is dus soms waar. Toch?
Als je het mij vraagt:
Niet het if -statement is "soms waar", maar de conditionele expressie (a + b < a) die bij het if-statement hoort kan "soms waar" zijn. Er is verschil tussen
if(a + b < a) en alleen maar (a + b < a)
1. "
if(a + b < a) is soms waar" is onzin.
"if" is strikt genomen een control-statement waarmee je het programmaverloop kan wijzigen door middel van de conditionele expressie die er direct op volgt.
Je kan niet in termen van "waar" of "niet waar" spreken over het "if"-statement zélf.
Je kan wél in termen van "waar", "niet waar" of "soms waar" spreken over de
conditionele expressie die bij het if statement hoort. Daarom zou ik kiezen voor "snap ik niets van".
2. (a + b < a) is hier de conditionele expressie die bij "if" hoort. Deze
kan dus wél "soms waar" zijn.
Of de gegeven conditionele expressie (a + b < a) in een programma ook werkelijk "soms waar" is, hangt er nog maar helemaal van af welke waarden a en b op die plaats in het programma in de praktijk zouden kunnen aannemen,
waarbij ook rekening moet worden gehouden met de mogelijkheid van over/underflows. Daar kun je dus nog over twisten.
Echter iets als "if (a + b) < a)" is bij uitstek een controle of er eventueel een gevaarlijke overflow zou kunnen optreden als je a optelt bij b (a en b signed en positief, > 0 ), of anders had men beter kunnen programmeren: If(b < 0)
Maar okee: in alles overkoepelende algemeenheid zou je hier kunnen zeggen: (a + b < a) "is soms waar".
We hebben het dan puur over de conditionele expressie achter "if".
(opmerking: voor detectie van een underflow kun je om wille van programma-struktuur en snelheid beter een iets andere conditionele expressie gebruiken).
Wel kan het verwarrend zijn om te spreken over "waar" en "niet waar" als je negatieve logica gebruikt. (#define TRUE = 0 en #define FALSE = 1 in plaats van #define TRUE = 1 en #define FALSE = 0)
"TRUE" en "FALSE" zijn namelijk niet gedefineerd in C. Je kunt ze naar believen definiëren. Opletten dus bij negatieve logica. Of anders liever niet in termen van "true"(waar) en "false"(niet waar) spreken. Zie eerdere posts van mij.
Samengevat:
---------------------Hoe
if(a + b < a) "waar", "niet waar", of "soms waar", zou kunnen zijn "snap ik niets van".
Dat wil zeggen: ik snap het statement op zich wel, maar het is strikt genomen onzin dat het if -statement zélf "waar", "niet waar" of "soms waar" zou kunnen zijn.
Het is strikt genomen de
conditionele expressie (a + b < a) die bij "if" hoort, die
afhankelijk van de waarden die a en b op dat moment in het programma zouden kunnen aannemen wat bepaalt of deze expressie "waar", "niet waar" of "soms waar" is.
Ga je er vanuit dat de programmeur weet wat hij doet, dan bestaat er kennelijk risico op een gevaarlijke overflow. Dit kan gebeuren bij optellen van positieve signed integers. Meestal is de expressie dan "niet waar" , maar vanwege de kans op een bijzondere overflow is de expressie dan toch "
soms waar".
Dit geldt dus voor de conditionele expressie in het if-statement. Niet voor het if-statement zelf.
Geniepig, maar zo is het volgens mij als je het nauw bekijkt.
Goeroehoedjes