Waardes toekennen aan variabelen.

algemene C code
Berichten: 30
Geregistreerd: 14 Dec 2018, 14:39

Waardes toekennen aan variabelen.

Berichtdoor FTMZ » 17 Jul 2020, 11:39

Hallo mensen,

Stel ik heb in een programma een aantal keren dezelfde waardes, of een veelvoud daarvan nodig.

Nu wil ik die waardes kunnen instellen en dat is ook geen probleem.

Het gaat erom dat ik ergens in het programma ook geregeld wil hebben dat bv "B" altijd 3x zoveel is als "A"
En ook "C" die dan 7x zoveel als "A" is.

Dus komt er ergens in dat programma te staan.
Code: Alles selecteren
int B = (A * 2);
int C = (A * 7);

Toch?

Het hoe en wat eromheen ga ik wel ontdekken, denk ik...
Maar mijn vraag is of ik dit éénmalig kan aangeven in VOID setup.
Of moet ik dit telkens herhalen wanneer ik het wil gebruiken?
Nu begreep ik dat er ook variabelen zijn met een naam, die op een andere plek niet kunnen worden gebruikt.
Om dat te voorkomen moest ik hem Volatile maken? (Indiaas Engels op Youtube is soms moeilijk te volgen :( )

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Waardes toekennen aan variabelen.

Berichtdoor Koepel » 18 Jul 2020, 00:33

Helaas begrijp ik niet wat je bedoelt met variabelen die met een naam ergens anders niet gebruikt zouden kunnen worden of wat je met 'volatile' wilt doen.

De taal 'c' en 'c++' is dit:
tell twee bij een variabele op;
vermenigvuldig twee variabelen;
zet een uitgang hoog;
doe iets;

Jij wilt de compiler vertellen dat "B" altijd 3x zoveel is als "A". Dus zodra "A" wijzigt, dat dan ook "B" moet veranderen. Dan wil je als het ware een statement uitvoeren als iemand iets met variabele "A" doet. Dat zit niet in de taal 'c' en 'c++'.

Er zijn een aantal manieren om dit op te lossen. Met een uitgebreide class is het zelfs mogelijk om heel dicht te komen bij wat jij wilt. Maar echt handig lijkt me dat niet. Een functie lijkt me het beste.

cpp code
int geef_b( int a)
{
return( 2 * a);
}

Berichten: 30
Geregistreerd: 14 Dec 2018, 14:39

Re: Waardes toekennen aan variabelen.

Berichtdoor FTMZ » 18 Jul 2020, 11:20

Bedankt voor je reactie, Koepel!

Wat ik begreep van variabelen, was dat je ze kon toekennen binnen een bepaald deel van het programma, maar dat deze variabelen onbekend waren in een ander deel van het programma.

Dus ik heb bv een variabele "temp" in een bepaalde loop van het programma zitten en ik geef daar de waarde 6 aan.

In een ander deel van het programma heb ik óók een loop met daarin weer een variabele "temp", waarbij deze niets te maken heeft met die andere temp. Ze zitten elkaar niet in de weg en zijn alleen actief binnen die ene loop waarin ze zijn declared.

Anyway... Zo begreep ik het. Als je die variabele dan Volatile zou maken, zou je dat "probleem" niet hebben... of zoiets... :roll: :-)
Ik gebruik het zelf overigens niet. Zou ik te verwarrend vinden.

Waar het in mijn vraagstelling om ging was dat ik 3 variabelen heb. A,B en C. Waarbij B 2x A is, en C 7x A.
Ik dacht dat als ik code:
Code: Alles selecteren
int B = (A * 2);
int C = (A * 7);

zou maken in de "VOID setup", ik me daar niet meer druk over hoefde te maken. B zou áltijd 2x A zijn, en C 7x A, door het hele programma heen.
Dat lijkt me nu wishfull thinking en ik ga het anders doen. Ik blijf variabele A houden, maar zal ipv B en C nu respectievelijk (a*2) en (a*7) houden.

Neemt niet weg dat ik dat "geeft" interessant vind. Los van hoe het aangeroepen wordt.
Ik begreep dat dat net als VIOD een segment in het programma is, met dien verstande dat VOID niets terug geeft.

Het mooie van om klooien is dat je er altijd van leert. :-)

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Waardes toekennen aan variabelen.

Berichtdoor Koepel » 18 Jul 2020, 14:59

De 'volatile' keyword is voor iets anders, dat is alleen bij interrupts van belang.

Een globale variabele kun je overal gebruiken.
Het heeft de voorkeur om een variabele zo lokaal mogelijk het houden.
Je kunt binnen een functie, maar ook binnen een for-loop lokale variabelen maken. Als je er niet zeker van bent, dan kun je al die variabelen een iets andere naam geven. Dat maakt het duidelijker.

Sommigen declareren een globale variabele en een lokale variabele met dezelfde naam. Dat is vragen om problemen. Er zijn duidelijke regels wat de compiler gaat doen (de meest lokale heeft de meeste voorkeur), maar je kunt zulke verwarring beter voorkomen.

De taal 'c' en 'c++' is echt van: doe dit, doe dat.
Je kunt dus niet een variabele automatisch van waarde laten veranderen of iets ergens anders laten gebeuren. Er wordt alleen gedaan wat jij zegt dat daar moet gebeuren.

Sommigen gebruiken "een void" en bedoelen daar een functie mee. Je kunt beter het woord "functie" gebruiken.
Dit zijn drie functies:

Code: Alles selecteren
int bereken( int a, int b)
{
  int c;
  c = a + b;
  return( c);
}

float magicNumber()
{
  float something;
  something = (float) random( 0, 1000) * (float) random ( 0, 1000);
  return( something);
}

void ledje( int state)
{
  digitalWrite( 13, state);
  return;
}


De "void" betekent alleen maar dat er geen waarde terug gegeven wordt. Het ding heet gewoon een "functie" net als die andere twee functies.
Een "void" is een niets, een grote leegte, iets zonder inhoud.

Nick Gammon: "Think of the word function as being there in spirit".
Referentie: https://arduino.stackexchange.com/questions/51064/why-do-people-complain-when-i-call-my-functions-voids.

Met een segment heeft "void" niet te maken. Over het algemeen komt alle code van het bestand in hetzelfde segment.

Berichten: 30
Geregistreerd: 14 Dec 2018, 14:39

Re: Waardes toekennen aan variabelen.

Berichtdoor FTMZ » 19 Jul 2020, 15:59

Dat verhaal rondom Volatile kwam ik inderdaad tegen in een speurtocht naar meer info over interrupts.

Maar idd... Laat ik het voortaan een functie noemen.

Bedankt voor je uitleg. :)

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten