Jag råkade göra ett slarvfel och glömde att det ska vara KnappTryckt() och inte enbart KnappTryckt.
Med mitt slarvfel blev det att villkoret alltid blev uppfyllt, och det hade jag ju inte tänkt.
Ingen varning eller felmeddelande från kompilatorn.
Varför blir det så här, hur kan kompilatorn godkänna detta ?
Sedär, beror på kompilatorflaggor då, om den varnar eller ej...
Kollade i MPLAB X som jag sitter i för stunden, och fick först ingen varning när jag gjorde likadant.
Men i inställningarna för kompilatorn (xc32) fanns en inställning att markera "Additional warnings", då började den varna på exakt samma sätt som du fick fram.
Nu är väl inte Hitech C GCC-baserad som xc32, men kanske finns där någon liknande inställning ändå....
Tack för svar, så nu vet jag detta.
Lite konstigt ändå, varför skulle man vilja se om adressen till en funktion är =noll, när det är en funktion som ligger fast i programminet, den kommer aldrig att vara =noll. Lättare att förstå nyttan av det här när det är en pekarvariabel (som pekar till en funktion). Då skulle man kunna se om pekarvariabeln fått nåt värde eller ej.
Det går att göra mycket med C, men ibland kan det vara lite kryptiskt och läsbarheten av koden är inte helt solklar.
Hittade inte nån inställning för att få en varning om detta, i MPLAB 8 och Hitech C.
Mjo, fast det är lite typiskt för C. Att göra som programmeraren säger.
Men jag gissar att just din kompilator antagligen behandlar en funktion och en funktionspekare lika.
I boken "Writing solid code" (rekommenderas starkt) lärde man ut vad de kallade "defensiv programmering" - en teknik
för att undvika buggar. T.ex. så placerar man alltid konstanten till vänster i villkorsuttryck, ett glömt "=" ger då ett
kompilatorfel istället för en stygg logisk bugg.
Grejen är ju den att man normalt inte utvärderar vad något används till utan använder konstruktionen som den är definierad.
foo betyder helt enkelt pekaren till funktionen
foo() betyder värdet som funktionen returnerar.
Om du sen stoppar in det i villkorsdelen på en if eller som högerledet i en tilldelning är egalt för språket. Tråkigt nog.
Samma samma med = kontra ==. Båda returnerar något värde. Om tilldelningsoperatorn = inte returnerade ett värde hade säkert 90% av alla fel i C/C++ försvunnit (något överdrivet, jag vet).
Finns det en varningsnivå man kan välja? Sätt den så högt du kan. Finns alternativet att behandla varningar som fel så slå på det också. I den programvara jag underhåller dagligdags som har några hundra tusen rader kod hitta vi ett 10-tal = i if när jag höjde varningsnivån vid kompilering. Buggar vare sig vi eller tack och lov kunden hittat.
I det senare alternativet tilldelas variabeln ett nytt värde. I det första fallet görs bara en jämförelse vars resultat aldrig används, men det ”svalde” kompilatorn utan klagomål!