Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Mam maly problem z gcc. Napisalem krotki programik, ktory musi obrabiac duze liczby caklowite. Przy zwyklej kompilacji wywala jakies glupoty (niepoprawny wynik), ale jak skompiluje go z opcja
-static
to wszystko jest ok. Caly problem polega na tym, ze zielonego pojecia nie mam, co robi ta opcja i nigdzie nie moge tego znalezc. Jakby co to:
$ gcc --version gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Aha, glownie problem mam z long long int. Dla zwyklych int'ow jest ok (tzn wielkosci z zakresu int).
Offline
google mówi to
link
Offline
na chłopski rozum: kompiluje statycznie, czyli włącza biblioteki do binarki.
porównaj rozmiar binarki ze -static i bez.
a po -static jeszcze zrób strip, to nieco zmniejszy rozmiar (wywali niepotrzebne symbole).
Offline
Dzieki za pomoc. Jakos tak dlubalem w google i na nic nie moglem trafic. CHyba jakis slepy dzisiaj jestem.
Durna rzecz zrobilem, bo nie zerowalem zmiennych na poczatku. Widocznie opcja -static to taka optymalizacja, ktora zeruje pamiec :-)
Offline
Wrzuciłbyś kod to bym go przejrzał. "The more eyes..."
Offline
Prosze:
#include <stdio.h> #include <stdlib.h> #define ll long long int int main() { ll i = 0; ll d = 0; ll reszta = 0; ll d1 = 0; ll suma = 0; ll m,l,k,s; ll c[105]; ll r[105]; char c1; scanf("%lld %lld %lld %lld", &m, &l, &k, &s); /*bez tej inicjalizacji wszystko sie sypiue*/ for(i = 0; i < m; i++){ scanf("%lld", &c[i]); scanf("%c",&c1); } for(i =0; i < 105; i++) r[i] = 0; for(i = 0; i < l; i++){ scanf("%lld", &d); scanf("%c",&c1); scanf("%lld", &d1); r[d-1] += d1; scanf("%c",&c1); } for(i = 0; i < m; i++){ if(r[i] > 0){ d = i; d1 = r[i] / k; reszta = r[i]%k; if( c[d] * reszta < s ) suma = suma + d1*k*c[d] - (d1*s); else{ if(d1 * k != r[i]) d1++; suma = suma + r[i] *c[d] - (d1)*s; } } } printf("%lld", suma); return 0; }
Pisalem to na szybko, wiec jest troche syfiasto :-)
Offline