1 Naposledy upravil: MightyPork (2014-09-18 14:55:22)

Téma: [vyřešeno] error in IF code: > invalid definition for true-IF-result

Další divná chyba na kterou jsem narazil, kdo ten kompiler proboha psal?

if(sys[140] == 1) sys[232] = 1;

13: coding error : error in IF code: > invalid definition for true-IF-result

*** Analyze done - Code is OK ***

Přitom by to mělo fungovat, protože např. toto se zkompiluje bez problému:

loop:
if(sys[64] != 0) goto loop;
Chcete #include, lepší makra, řídící struktury atd. v SDS-C? Nástroj SDSCP vám to umožní!

2

Re: [vyřešeno] error in IF code: > invalid definition for true-IF-result

Takto funguje SDS-C překladač.

Je to z historického hlediska, kdy ještě předklad ze zdrojového textu probíhal na straně zařízení (dnes je v EXE na straně PC), což přineslo řadu omezení (tzn. SDS-C je velmi omezenou variantou FULL-C).

Jedno z těchto omezení je, že
IF umí pouze volat jedinou funkci (nebo použít goto) jako reakci na výsledek testu, tzn.

if (sys[140] == 1) funkceA() else funkceB();

Opakuji, umí volat jedinou funkci (nebo použít goto), tzn. neumí provést např. ono zmíněné LVar přiřazení v původním textu.

Správný zápis má vypadat takto:

if (sys[140] == 1) { sys[232] = 1; }

Preprocesor rozpozná závorky a upraví kód tak, že jej pak SDS-C překladač umí zpracovat.

Aktuální SDSC.exe by mělo i správně vypsat chybu, v případě porušení pravidel SDS-C pro IF.

Vše je popsáno na WiKi, doporučuji přečíst návody a prohlédnou vzorové příklady.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !