Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Mielipiteitä ELG-enginestä

Sivun loppuun

ville-v [22.04.2005 16:38:57]

#

Olen joitakin viikkoja väsäillyt engineä C/C++-ohjelmointiin ja haluaisin kuulla mielipiteitänne/parannusehdotuksianne enginestä. Engine sisältää tällä hetkellä mm. pienimuotoiset konsolinkäsittelyfunktiot Windowsiin ja muutamat tiedostonkäsittelyfunktiot Linuxille ja Windowsille. Enginen löydätte täältä. Jos enginen koodaaminen kiinnostaa, niin kertokaa ihmeessä. Kaikki koodarit ovat tervetulleita mukaan.

Ja kommentoidessanne muistakaa, että versionumero on 0.01.

sqwiik [22.04.2005 16:47:18]

#

Voisit ainakin kommentoida, että nuo näppäinsysteemit on kopioitu SDL:stä...

ville-v [22.04.2005 16:50:57]

#

Mitä kohtaa tarkoitat? SDL:stä olen tosiaan joitakin kohtia surutta ottanut, mutta ei se kaada maailmaa (tai engineä :D )

sqwiik [22.04.2005 16:52:37]

#

Ajattelin vain mainaista, sillä on sentään hyvää käytöstä ilmoittaa jos lainaa jotain muiden työstä. Tarkoitin tuota näppäinten määrittelyä.

Metabolix [22.04.2005 16:55:43]

#

while(fscanf(fileread, "%c", &cTmp)!=EOF){
  fprintf(filewrite, "%c", cTmp);

Miksi ihmeessä tavu kerrallaan, fscanf ja fprintf? Miksei fread ja fwrite isommalla puskurilla? Lisäksi jonkinlainen virhearvon palautus voisi olla paikallaan, jos tiedostoa ei saa kopioitua.

/* number of elements in a table */
#define ELG_TABLESIZE(t) (sizeof(t)/sizeof(t[0]))

Aika hassu idea. Jos taulu ei ole määrätyn kokoinen vaan mallocilla varattu, tuosta ei taida olla hyötyä (osoittimen koko = 4), ja jos taas taulun koko on olemassa, ihmiset varmaankin näkevät sen taulukon määrittelystä.

Mikäs muuten on extern "C" -komennon merkitys? Ei ole koskaan oikein selvinnyt.

Joskus väsäilin jotakin tuon tapaista, Windowsille kylläkin (siis WinAPI-systeemeihin). Voisin olla kiinnostunut osallistumaan projektiin.

ville-v [22.04.2005 16:57:56]

#

Näppäinkoodit ovat aina samat. Pistin kuitenkin kommentin asiasta.

EDIT: Metabolix siis ehti ensin.

Vilkuilen vähän koodia, mitä olen ajatellut.

sqwiik [22.04.2005 17:01:02]

#

Tuo extern "C"{}-systeemi pakottaa kääntäjän kääntämään koodin aaltosulkeiden sisässä C-kielenä c++:n sijaan (jos käytössä C++ kääntäjä).

Ja tuohon taulukon laskemiseen samaten: se ei toimi malloc:lla varattuihin taulukoihin (oli myös ERKKI-enginessä muinoin), mutta se toimii staattisilla taulukoilla.

ville-v [25.04.2005 17:35:33]

#

Parantelin engineä hiukkasen, nyt löytyy mm. jonkinlainen aloitelma hiiren käyttöä varten. Mukana on myös valmiiksi käännetty DLL.

Ja muuten, Metabolix, ensimmäinen sääntö: Älä vain kyseenalaista minun tekemääni koodia vaan lähetä parempi koodi.

PS. EOF ei tarkoita, että on tapahtunut virhe, vaan, että tiedoston sisältö on päättynyt.

Metabolix [25.04.2005 20:35:02]

#

En virhearvolla viitannutkaan tuohon EOFiin vaan siihen, että funktiosi tyyppi on void, mutta koska sen suorittamisessa voi tapahtua jokin virhe (esim. tiedostoa ei löydy), siitä olisi hyvä palauttaa jokin ilmoitus.

Ja johan tuossa ehdotin vaihtoehtoisia toimintatapoja, en vain pidä tapanani kirjoittaa koodia, jos asian saa selitettyä suomeksi selkeästi. Tässä nyt kuitenkin:

#define VIRHEKOODI 0
#define ONNISTUI   1

char KopioiTiedosto(char *Lahdenimi, char *Kohdenimi)
{
  FILE *Lahde;
  FILE *Kohde;
  void *Puskuri;
  size_t Apu;

  if (!(Puskuri = malloc(1024)))
    return VIRHEKOODI;

  if (!(Lahde = fopen(Lahdenimi, "rb"))) {
    free(Puskuri);
    return VIRHEKOODI;
  }

  if (!(Kohde = fopen(Kohdenimi, "wb"))) {
    fclose(Lahde);
    free(Puskuri);
    return VIRHEKOODI;
  }

  do {
    Apu = fread(Puskuri, 1, 1024, Lahde);
    if (fwrite(Puskuri, 1, Apu, Kohde) != Apu) {
      fclose(Kohde);
      fclose(Lahde);
      free(Puskuri);
      /* remove(Kohdenimi); */
      return VIRHEKOODI;
    }
  } while (Apu == 1024);

  fclose(Kohde);
  fclose(Lahde);
  free(Puskuri);
  return ONNISTUI;
}

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta