Inte Tillåtet i C++ men väl i C ?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
4kTRB
Inlägg: 18285
Blev medlem: 16 augusti 2009, 19:04:48

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg av 4kTRB »

Varningen är den som syns i bilden några trådar upp.
Användarvisningsbild
4kTRB
Inlägg: 18285
Blev medlem: 16 augusti 2009, 19:04:48

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg 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. :roll: )

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;
			}
		}
	}
}
Användarvisningsbild
4kTRB
Inlägg: 18285
Blev medlem: 16 augusti 2009, 19:04:48

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg 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.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg 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.)
Användarvisningsbild
4kTRB
Inlägg: 18285
Blev medlem: 16 augusti 2009, 19:04:48

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg av 4kTRB »

Ja så klart "Rb" är ju en sträng!
Men pekaren är char.
Användarvisningsbild
AndLi
Inlägg: 17045
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg 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* ?
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg av Icecap »

Jag hade just der problem engång i tiden. Rätt deklaration var:
const char* const char[];
sm5tfx
Inlägg: 114
Blev medlem: 20 juli 2011, 14:28:41
Ort: Gnällbältet

Re: Inte Tillåtet i C++ men väl i C ?

Inlägg 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.
Skriv svar