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. :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;
			}
		}
	}
}

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.