Avatar billede tdh1309 Juniormester
14. april 2003 - 13:39 Der er 13 kommentarer og
1 løsning

error: statement not reached

Jeg ved godt hvad "statement not reached" normalt betyder. Men her er jeg godt nok sat af:

Kodeudsnit:
// Find the first symbol in the hashtable and return a pointer to it.
  for (i = 0; i < tp->hash_size; i++)
  {
    // error: statement not reached
    for (sp = tp->hash_table[i]; sp; sp = forw)
    {
      forw = sp->forw;
      if (forw == NULL)
      {
        htIndex = i + 1;
        next = tp->hash_table[htIndex];
      }
      else
      {
        htIndex = i;
        next = forw;
      }
      return sp;
    }
  }

I kodesnittet er markeret hvor den ikke kommer hen. Det er ind i den første for-løkke. Jeg kan ikke lure hvad der er årsag til problemet. Er der et kvikt hoved?
Avatar billede arne_v Ekspert
14. april 2003 - 13:48 #1
Ikke umiddelbart indlysende.

Mit gæt er at det har noget at gøre med:

for() {
  for() {
    ...
    return;
  }
}

hvor det er klart at begge for løkke rkun kan gennemløbes en gang
p.g..a return.
Avatar billede erikjacobsen Ekspert
14. april 2003 - 13:49 #2
Måske, arne, meeen..... Hvad er der med tp inden forløkken ?
Avatar billede arne_v Ekspert
14. april 2003 - 13:56 #3
Hypotesen er ihvertfald nem at teste.

// foran return
compile
se om fejlen forsvinder
Avatar billede tdh1309 Juniormester
14. april 2003 - 14:01 #4
Det kan umiddelbart se ud til, at virke. Problemet er dog at jeg er ved at porterere GoAheadWebserver. Koden kan komp. til bla. linux og windows, men bare ikke i kompileren til mit OS !!!
Men kom med svaret Arne
Avatar billede arne_v Ekspert
14. april 2003 - 14:05 #5
Der er altså noget mystisk ved den kode,

Hvorfor skulle man unconditional returnere inde i en dobbelt for
løkke ????

Men kan jeg forstå din kommentar som at udkommentering fjernede
fejl og at vi derfor kan konkludere at return er skurken ?
Avatar billede tdh1309 Juniormester
14. april 2003 - 14:07 #6
Umiddelbart ja
Avatar billede tdh1309 Juniormester
14. april 2003 - 14:11 #7
For at føje spot til skade har jeg et lign. problem her:
if (!umUserExists(userid))
    {
      websStats.access++;
      websError(wp, 401, T("Access Denied\nUnknown User"));
      trace(3, T("SEC: Unknown user <%s> attempted to access <%s>\n"), userid, path);
      nRet = 1;
    }    
    else if (!umUserCanAccessURL(userid, accessLimit))
    {
// Statement not reached
      websStats.access++;
      websError(wp, 403, T("Access Denied\nProhibited User"));
      nRet = 1;
    }
    else if (password && * password)
    {
      char_t * userpass = umGetUserPassword(userid);
      if (userpass)
      {
        if (gstrcmp(password, userpass) != 0)
        {
          websStats.access++;
          websError(wp, 401, T("Access Denied\nWrong Password"));
          trace(3, T("SEC: Password fail for user <%s>")
          T("attempt to access <%s>\n"), userid, path);
          nRet = 1;
        }
        else
        {
          //User and password check out.
        }
      bfree (B_L, userpass);
      }
      #ifdef DIGEST_ACCESS_SUPPORT
      }
      else if (flags & WEBS_AUTH_DIGEST)
      {
        char_t *digestCalc;
        // Check digest for equivalence
        wp->password = umGetUserPassword(userid);
        a_assert(wp->digest);
        a_assert(wp->nonce);
        a_assert(wp->password);
        digestCalc = websCalcDigest(wp);
        a_assert(digestCalc);
        if (gstrcmp(wp->digest, digestCalc) != 0)
        {
          websStats.access++;
          websError(wp, 405, T("Access Denied\nWrong Password"));
          nRet = 1;
        }
        bfree (B_L, digestCalc);
      #endif
    }
Avatar billede arne_v Ekspert
14. april 2003 - 14:15 #8
Det lyder som en lidt træls compiler. Tør man spørge om hvilken
compile rog hvilken platform ?
Avatar billede arne_v Ekspert
14. april 2003 - 14:15 #9
og et svar
Avatar billede arne_v Ekspert
14. april 2003 - 14:16 #10
Og den anden fejl er jeg helt blank over for.
Avatar billede arne_v Ekspert
14. april 2003 - 14:19 #11
Medmindre websError er erklæret til ikke at returnere.
Avatar billede tdh1309 Juniormester
14. april 2003 - 14:32 #12
Diab compiler - ukendt OS til en Motorale PowerPC
Avatar billede erikjacobsen Ekspert
14. april 2003 - 14:52 #13
Den første fejl - øverst - er korrekt.  i++  i forløkken
udføres aldrig pga return-sætningen. Godt nok
Avatar billede segmose Nybegynder
15. april 2003 - 10:46 #14
I
>>else if (!umUserCanAccessURL(userid, accessLimit))

er det en function eller en macro?
Er accessLimit evt. forkert, hvis det er en inline function kan compileren også finde ud af at det nok ikke vil lykkedes nogensinde.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester