Sida 2 av 2
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 27 september 2020, 22:33:14
av 4kTRB
Varningen är den som syns i bilden några trådar upp.
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 27 september 2020, 22:56:40
av 4kTRB
arvidb skrev: ↑27 september 2020, 22:27:18
4kTRB skrev: ↑26 september 2020, 00:29:54
Kod: Markera allt
typedef char* CharPointer;
CharPointer A = "X";
CharPointer B = "Y";
Ä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.
)
Kod: Markera allt
typedef const char* StringPointer;
StringPointer A = "X";
StringPointer B = "Y";
Det fungerar utan varning (jag tog bort varningsblockeringen -Wno-write-strings).
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 ?
Postat: 27 september 2020, 23:38:04
av 4kTRB
Men hallå om jag lägger till const för min CharPointer fås inget varningsmeddelande!!
Kod: Markera allt
typedef const char* CharPointer;
CharPointer Rb = "RB";
CharPointer Rc = "RC";
Det var ju det som inte ska fungera? Det fanns risk att skriva över en konstant.
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 27 september 2020, 23:58:48
av arvidb
Ja precis.
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 *"?
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 ?
Postat: 28 september 2020, 00:00:28
av 4kTRB
Ja så klart "Rb" är ju en sträng!
Men pekaren är char.
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 28 september 2020, 00:36:19
av AndLi
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* ?
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 28 september 2020, 08:05:17
av Nerre
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.
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 28 september 2020, 09:55:17
av Icecap
Jag hade just der problem engång i tiden. Rätt deklaration var:
const char* const char[];
Re: Inte Tillåtet i C++ men väl i C ?
Postat: 14 november 2020, 17:08:06
av sm5tfx
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.