Sida 1 av 1

Varning vid kompilering (C) [LÖST]

Postat: 28 jan 2009, 21:59
av Goncho
Halloj,
sitter med en liten uppgift liknande koden nedan. Jag ska skriva ut adressen till ett antal olika intar för att ta reda på dess strlk i minnet. I skolan, som kör solaris, fungerar nedanstående kod med gcc. Men när jag kör "gcc mitt_program.c" i terminalen i Ubuntu så varnar den att argument 2(rad 10) är en int * och inte en int. Eftersom det fungerar i skolan undrar jag om jag saknar något, kan jag installera något extra till gcc eller varför får jag en varning? När jag kör programmet ändå så fungerar det dock bra vad jag kan se. Finns det någon bokstav som lämpar sig bättre för en int *?

I övrigt blir jag glad om någon har en bra sida med någon typ av tabell för olika bokstäver för string format i C. :)

Kod: Markera allt

#include <stdio.h>

const int size = 12;

int main(){
  int ett = 1;
  short tva = 2;
  long tre = 3;

  printf("int ett = %d", &ett);
}

Re: Varning vid kompilering (C)

Postat: 28 jan 2009, 22:22
av Konservburk
Goncho skrev:sitter med en liten uppgift liknande koden nedan. Jag ska skriva ut adressen till ett antal olika intar för att ta reda på dess strlk i minnet. I skolan, som kör solaris, fungerar nedanstående kod med gcc. Men när jag kör "gcc mitt_program.c" i terminalen i Ubuntu så varnar den att argument 2(rad 10) är en int * och inte en int. Eftersom det fungerar i skolan undrar jag om jag saknar något, kan jag installera något extra till gcc eller varför får jag en varning? När jag kör programmet ändå så fungerar det dock bra vad jag kan se.
Ett bra tips är att använda gcc -Wall
Goncho skrev:Finns det någon bokstav som lämpar sig bättre för en int *?
Vet inte riktigt om jag förstår frågan, men jag svarar %p istället för %d.
Goncho skrev:I övrigt blir jag glad om någon har en bra sida med någon typ av tabell för olika bokstäver för string format i C. :)

Kod: Markera allt

man 3 printf

Re: Varning vid kompilering (C)

Postat: 28 jan 2009, 22:28
av Goncho
Tack för snabbt svar.Du förstod frågan rätt. Undrade alltså vad jag skulle skriva istället för %d.

Nu ska jag lusläsa manualen.

Edit: Hittar bara man 1 printf? "Ingen manualpost för printf i avsnitt 3"

Edit2: Vad gör 'gcc -Wall'. Ser inga större skillnader mot bara gcc.

Re: Varning vid kompilering (C)

Postat: 28 jan 2009, 22:39
av Lars
Goncho skrev:Edit: Hittar bara man 1 printf? "Ingen manualpost för printf i avsnitt 3"
Installera manpages-dev

Re: Varning vid kompilering (C)

Postat: 28 jan 2009, 22:45
av Goncho
Tack Lars.

Re: Varning vid kompilering (C)

Postat: 29 jan 2009, 00:15
av mcNisse
Du skriver ut adressen till variableln ett i ditt program inte värdet av det... :P

Re: Varning vid kompilering (C)

Postat: 29 jan 2009, 00:58
av Goncho
mcNisse skrev:Du skriver ut adressen till variableln ett i ditt program inte värdet av det... :P
Tack men det var meningen :)
Förstår var varningarna kommer ifrån, men inte varför jag får dom i Ubuntu och inte i Solaris.

Re: Varning vid kompilering (C)

Postat: 29 jan 2009, 08:21
av mcNisse
Du skriver ut en long och inte en int när du skriver ut adressen. testa %ld.
Varningarna kan bero på olika versioner av gcc.

Re: Varning vid kompilering (C)

Postat: 31 jan 2009, 16:06
av jsiei97
Goncho skrev: När jag kör programmet ändå så fungerar det dock bra vad jag kan se. Finns det någon bokstav som lämpar sig bättre för en int *?
Tja, ett förslag kan vara nedan.

Kod: Markera allt

#include <stdio.h>
#include <stdlib.h>

const int size = 12;

int main(){
    int ett = 1;
    void* pEtt = &ett;

    short tva = 2;
    void* pTva = &tva;

    long tre = 3;
    void* pTre = &tre;

    printf("int ett = %p \n", pEtt);
    printf("int två = %p \n", pTva);
    printf("int tre = %p \n", pTre);
    exit(0);
}
Ett tips är att slå på alla varningsflaggor du kan hitta till gcc, -Wall är bara en start ;D


Goncho skrev: I övrigt blir jag glad om någon har en bra sida med någon typ av tabell för olika bokstäver för string format i C. :)
Tog ner K&R från bokhyllan och slog upp printf... och där fanns det.

Fast det är kanske lättare att titta på
* http://en.wikipedia.org/wiki/Printf#pri ... aceholders
* http://www.cplusplus.com/reference/clib ... rintf.html
Dvs de två första träffarna på google när jag matade in printf :P


/Johan

Re: Varning vid kompilering (C)

Postat: 01 feb 2009, 23:16
av Goncho
Hehe, tack då.
Har googlat men just printf var lite för enkelt för att jag skulle komma på det tror jag :)

Re: Varning vid kompilering (C)

Postat: 02 feb 2009, 08:04
av jsiei97
Goncho skrev:Hehe, tack då.
Har googlat men just printf var lite för enkelt för att jag skulle komma på det tror jag :)
Ett annat inte helt uppenbar men mer generellt tips är att använda man:
man 3 printf
Grupp 3 av man-sidorna innehåller just info om lib-anrop.

och för att söka bland man sidor efter t.ex. printf.
man -k printf
Tror för övrigt att man funkar lika bra på Solaris.

/Johan
(Lycka till med programmeringskursen,
och glöm inte att c är så mycket mer än bara det man lär ut i skolan :) )