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/.

Członek DUG


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


były zielony_83 :)
google mówi to
link
Offline

Członek DUG


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

Członek DUG


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

Członek DUG


Wrzuciłbyś kod to bym go przejrzał. "The more eyes..."
Offline

Członek DUG


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