Dodaj do ulubionych

Problem z GCC

02.08.05, 13:08
Sorry, w poprzednim temacie coś się popsuło ;)



Napisałem teoretycznie przenośny program. Z BCC 5.5 nie ma problemów. W
Linuksie też się kompiluje pod GCC, ale są 3 problemy:

1) W BCC potrzebne są nagłówki alloc.h i mem.h, w GCC nie (zgłaszany jest
błąd). Poszukuję stałej, która opisuje system lub rodzaj kompilatora. Jeśli
wykryty zostanie GCC, nagłówki nie będą dołączane.

2) W BCC mamy CLK_TCK a w GCC CLOCKS_PER_SEC. Piszę:

#ifndef CLK_TCK
#define CLK_TCK CLOCKS_PER_SEC
#endif

i próbuję użyć w programie CLK_TCK, ale nie działa. O co chodzi?

3) W programie jest pętla, w której wykonywane są obliczenia. W ciele pętli
jest coś takiego:

/* jakieś obliczenia */

if ((++pix_counter) == pix_put_dot) {
pix_counter = 0;
printf("%s", ".");
}

Jednym słowem chcę stawiać kropkę na ekranie co ileś obiegów pętli. W BCC jest
OK, ale w GCC kropki się nie pojawiają, za to po wyjściu z pętli jest
wyrzucany cały ciąg kropek za jednym razem. Jak to możliwe?

Program w ANSI C, wyłącznie standardowe biblioteki języka C, a są różnice.
Parodia!
Obserwuj wątek
    • user0001 Re: Problem z GCC 02.08.05, 18:09
      To nie jest okres oddawania studenckich projektów więc postaram się ograniczyć
      wredność ;-)

      > 1) W BCC potrzebne są nagłówki alloc.h i mem.h, w GCC nie (zgłaszany jest
      > błąd). Poszukuję stałej, która opisuje system lub rodzaj kompilatora. Jeśli
      > wykryty zostanie GCC, nagłówki nie będą dołączane.

      gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
      #ifndef __GNUC__
      #include <alloc.h>
      #include <mem.h>
      #endif

      Powyższe nagłówki są jednak mocno nie standardowe, więc lepiej jeżeli zajrzysz
      do dokumentacji Borlanda i wprowadzisz makra wykrywające ich kompilator, a
      includy umieścisz w #ifdef.

      > 2) W BCC mamy CLK_TCK a w GCC CLOCKS_PER_SEC. Piszę:

      Nie mam dokumentacji Borlandowskiego CLK_TCK, ani kodu w którym używasz tego
      podstawienia, bez nich nie ruszę.

      > Jednym słowem chcę stawiać kropkę na ekranie co ileś obiegów pętli. W BCC jest
      > OK, ale w GCC kropki się nie pojawiają, za to po wyjściu z pętli jest
      > wyrzucany cały ciąg kropek za jednym razem. Jak to możliwe?

      Różnice w implementacji biblioteki standardowej, a konkretnie buforowanie.
      www.gnu.org/software/libc/manual/html_node/Stream-Buffering.html#Stream-Buffering
      Po printf umieść "przeczyszczenie" bufora wyjściowego:
      (void)fflush(stdout);
      to powinno rozwiązać problem.
      • rysiek.muller Re: Problem z GCC 02.08.05, 18:50
        Dzięki za wskazówki :D

        Spoko, to nie żaden projekt studencki. Programy pisze się też z pasji, nie tylko
        na zaliczenie :D

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka