Sida 5 av 5
Re: DMR, Digital Mobile Radio...
Postat: 27 januari 2020, 05:02:19
av AndLi
Man kan ju säga samma sak om din åsikt om static... varför finns static om det ändå är så det ska bli som standard...
Fick du inte en varning om att den var deklarerad på två ställe?
Re: DMR, Digital Mobile Radio...
Postat: 27 januari 2020, 07:57:19
av Mr Andersson
Det är inget fel, och ger ingen varning, att deklarera samma namn flera gånger så länge det är samma typ.
Länkaren kommer slå ihop dem till samma variabel.
Det man inte får göra är att ha flera definitioner.
Det här är OK (Endast en definition)
fil1.c int a;
fil2.c int a;
fil3.c int a=0;
Det här är inte OK (Flera definitioner)
fil1.c int a=0;
fil2.c int a=0;
fil3.c int a=0;
Angående extern så är det väl mest ett skydd mot misstag.
Variabeldeklarationer är implicit också definitioner om namnet inte redan finns.
Säg t.ex. att jag vill använda en variabel från fil2 i fil1..
fil1.c int a;
fil2.c int a=0;
Om jag glömmer inkludera fil2 i makefilen kommer länkaren automatiskt att definiera a som oinitialiserad. Inte bra.
Om jag istället skriver
fil1.c extern int a;
fil2.c int a=0;
så stänger extern av den implicita definitionen och jag får kompileringsfel länkningsfel om jag missar att inkludera fil2.
Re: DMR, Digital Mobile Radio...
Postat: 28 januari 2020, 06:23:29
av Marta
I dokumentationen till gcc, avsnitt 6.2 står det:
Unless explicitly stated otherwise, declarations made at the top-level of a file (i.e., not within a function) are visible to the entire file, including from within functions, but are not visible outside of the file.
Jag tolkade "explicitly stated otherwise" som att ett direktiv måste användas, men vid närmare eftertanke finns inget "export"e.dyl. De syftar på någonstans i manualen, inte i koden...
Hur som helst borde linkern kräka upp ett felmeddelande om inte extern använts. Det här är verkligen otäckt. Det är ju förfärande enkelt att råka återanvända ett variabelnamn så som skedde nu. Resultatet blev en lång jakt på overflows eller att interleavern "stänkte".
Re: DMR, Digital Mobile Radio...
Postat: 28 januari 2020, 06:59:45
av AndLi
Dra dit en static framför dina globala variabler så försvinner risken!
Det är ju en annan skojighet med c, de ganska olika innebörderna av att sätta static framför...
Re: DMR, Digital Mobile Radio...
Postat: 28 januari 2020, 17:58:02
av Mr Andersson
gcc-manualen har tekniskt sett rätt, men demonstrerar samtidigt hur förrädiskt declarations vs definitions är.
Deklarationen i fil1 syns inte utanför filen från kompilatorns synvinkel (den kompilerar en fil i taget),
men om du deklarerar samma namn med samma typ i en annan fil kan länkaren se den tidigare definitionen och reglerna säger att matchar typen ska det vara samma instans.
Jag delar AndLis rekommendation, använd alltid static på fil-globala variabler (och funktioner) om du inte 100% vet att de ska delas mellan flera filer.
Re: DMR, Digital Mobile Radio...
Postat: 29 januari 2020, 09:43:53
av Marta
Övre vänstra hörnet av appform har en liten icon. Hur sätter jag denna? Får bara blaj från google.
Har skapat en xpm med GIMP, men därifrån till hörnet är det tvärnit.
Programmet använder xlib direkt, utan mellanliggande megaklump.
Re: DMR, Digital Mobile Radio...
Postat: 11 februari 2020, 09:32:19
av Marta
Håller nu på och hyfsar till programmet inför att lägga upp det på min hemsida. Har dykt upp lite problem som jag behöver lite råd för bästa lösning.
Utöver Debian provade jag ett par kladdlinux i VB och fick problem med att texten flöt ut över gränserna och att teckenhöjden blev fel. Skulle behöva sätta upp ett antal fonts som kan testas automatiskt tills en brukbar hittas. Det skall vara en smal sans serif propfont. Förslag sökes från Er med erfarenhet?
Fick även trubbel med ljudet med en kladdlinux (LM). Allt ser rätt ut, men det hörs ingenting och miken är stendöd. Judenheterna öppnas däremot utan gnäll. Vad tror Ni experter det kan vara?
Re: DMR, Digital Mobile Radio...
Postat: 14 februari 2020, 11:19:45
av Marta
Fick oväntat problem med att porta till RPi.
void main(){
char i;
i=-10;
printf("test %d\n", i);
};
marta@lillan:~/dvg $ gcc test.c
marta@lillan:~/dvg $ ./a.out
test 246
marta@lillan:~/dvg $
Är detta bug eller feature? Skall signed char försvinna?
Fick växla till int och sedan if (crap>127) crap|=0xffffff00;
Re: DMR, Digital Mobile Radio...
Postat: 14 februari 2020, 11:35:40
av ajje
Det är olika på olika arkitekturer om gcc räknar char som signed eller unsigned.
https://wiki.debian.org/ArchitectureSpe ... mo#Summary
Re: DMR, Digital Mobile Radio...
Postat: 14 februari 2020, 11:40:28
av mankan
Varför använda char till annat än tecken när typerna i stdint.h har funnits bra länge nu? Verkar som det är int8_t du vill ha.
Re: DMR, Digital Mobile Radio...
Postat: 14 februari 2020, 14:26:33
av Marta
Tackar för hjälpen.
Orsaken är enkel, jag är för gammal för det hä och har alltid använt char för signed 8-bit.
Det verkar finnas fler skillnader i arm-versionen. X11 tycks buffra på ett annat sätt. Kan dra ett annat fönster över utan att det genererar redraws.
Verkar vara stökigt att hålla den kvalitet på programmet som jag skulle vilja göra. Har problem med fonter som inte finns så det kan inte ens visas felmeddelande utan att starta från terinal i debug-läge.
Även problem med att speca ljudenheter i .conf på ett bra sätt. Finns där verkligen ingen vettig kortform likt /dev/ttyUSB0 istället för en hel rad med blaj som t.ex. alsa_input.pci-0000_00_1b.0.analog-stereo? Sådana strängar är stökiga för användaren.