Inte Tillåtet i C++ men väl i C ?
Re: Inte Tillåtet i C++ men väl i C ?
Det fungerar utan varning (jag tog bort varningsblockeringen -Wno-write-strings).arvidb skrev: ↑27 september 2020, 22:27:18Är inte problemet att du försöker tilldela en "const char *" till en variabel deklarerad som "char *"? (Det hela vore så mycket enklare om du angav vilket felmeddelande du får. )4kTRB skrev: ↑26 september 2020, 00:29:54Kod: Markera allt
typedef char* CharPointer; CharPointer A = "X"; CharPointer B = "Y";
Kod: Markera allt
typedef const char* StringPointer; StringPointer A = "X"; StringPointer B = "Y";
Frågan är vad som skickas med Serial.write(c); nedan?
Kod: Markera allt
void rRefAdjust(StringPointer c){
bool breakFlag = true;
double averageVoltA;
double averageVoltB;
double vDiff;
Serial.write(c); // Java-datorn skannar data från Arduino mha
Serial.write("\n"); // java.util.Scanner.Scanner(InputStream source)
while(breakFlag){ // Den inväntar texten RA eller RB innan data börjar
averageVoltA = 0; // samlas in
averageVoltB = 0;
vDiff = 0;
averageData(averageVoltA, averageVoltB, vDiff); // mät obalansen medelvärdesbilda en aning
adjustAlert(vDiff); // skicka obalansspänning till Java-dator
if (Serial.available() > 0){ // kommando sänt? Avbryt balanstrimmning av brygga?
if(Serial.read() == WHILE_LOOP_BREAK){ // 200 avbryter while-loop
breakFlag = false;
}
}
}
}
Re: Inte Tillåtet i C++ men väl i C ?
Men hallå om jag lägger till const för min CharPointer fås inget varningsmeddelande!!
Det var ju det som inte ska fungera? Det fanns risk att skriva över en konstant.
Kod: Markera allt
typedef const char* CharPointer;
CharPointer Rb = "RB";
CharPointer Rc = "RC";
Re: Inte Tillåtet i C++ men väl i C ?
Ja precis.
En dålig idé att maskera buggen med -Wno-write-strings alltså. Bättre att lösa problemet genom att deklarera variabeln som const som du verkar ha gjort nu. (Sen om man kallar typen för StringPointer eller CharPointer är ju en smaksak bara.)
Re: Inte Tillåtet i C++ men väl i C ?
Varför obfyskera koden med icke standard datatyper som skapar förvirring?
Om det är en char* så är det väl lämpligt att kalla det för en char* ?
Om det är en char* så är det väl lämpligt att kalla det för en char* ?
Re: Inte Tillåtet i C++ men väl i C ?
När man pratar om konstanter när det gäller pekare gäller det att hålla tungan rätt i mun.
Jag minns faktiskt inte exakt hur man deklarerar skillnaderna, men det är skillnad på en pekare som ÄR en konstant och en pekare som PEKAR PÅ en konstant.
Jag minns faktiskt inte exakt hur man deklarerar skillnaderna, men det är skillnad på en pekare som ÄR en konstant och en pekare som PEKAR PÅ en konstant.
Re: Inte Tillåtet i C++ men väl i C ?
Jag hade just der problem engång i tiden. Rätt deklaration var:
const char* const char[];
const char* const char[];
Re: Inte Tillåtet i C++ men väl i C ?
Lite sen på hanen här, men jag har inte varit inloggad på drygt en halv evighet.
Deklarationer i C/C++ skall läsas inifrån och ut, åt höger och sen vänster brukar man säga.
Så i const char *const p är p en konstant pekare till konstanta tecken, det vill säga en konstant pekare till en sträng vars innehåll du inte kan ändra på.
void (*a[4])(int) - här är a en array av fyra pekare till funktioner som tar en int som parameter och returnerar void.
Jeez, till vardags rekommenderas istället https://cdecl.org "C gibberish ↔ English", det tipset var egentligen huvudpoängen med att väcka upp den här tråden igen.
Deklarationer i C/C++ skall läsas inifrån och ut, åt höger och sen vänster brukar man säga.
Så i const char *const p är p en konstant pekare till konstanta tecken, det vill säga en konstant pekare till en sträng vars innehåll du inte kan ändra på.
void (*a[4])(int) - här är a en array av fyra pekare till funktioner som tar en int som parameter och returnerar void.
Jeez, till vardags rekommenderas istället https://cdecl.org "C gibberish ↔ English", det tipset var egentligen huvudpoängen med att väcka upp den här tråden igen.