Twee vragen voor u "C" goeroes

G

GrandAlf

Guest
Als relatieve nieuwkomer op C, ik heb een paar vragen die misschien iemand kon enlignten me op.De eerste is wanneer een variabele wordt verklaard buiten alle functies, ik heb gelezen dat dat ook moet worden verklaard in een functie die het gebruikt.Ik heb geconstateerd dat het werkt prima zonder dit te doen, niemand weet waarom moet dit een vereiste?.Ook bij gebruik van een RTOS, en de veronderstelling dat ik een functie binnen een taak die geen gebruik maakt van externe variabelen, kan ik noemen dat het als een normale functie, of zijn er timing problemen bij het doorgeven van gegevens en achteruit.

Eventuele adviezen dankbaar ontvangen.

 
wanneer een variabele wordt verklaard uit van een functie is een globale variabele en kan worden gebeld of doorgegeven aan een functie wanneer een variabele wordt verklaard binnen een functie is het lokaal tot die functie alleen.
U hoeft niet opnieuw te verklaren dat gloval functie binnen een andere fn als wanneer u passeert een variabele hij gebruikt.

correct me if iam verkeerde

 
Ik ben het met u EcraZ, ze werken prima als deze, zijn alleen die in de Ansi C boek, het zegt externe variabele moet ook worden aangegeven in funcions dat ze gebruiken?.Beats me!

 
externe variabelen worden gedeclareerd in een bestand, maar in een ander bestand de compiler moet weten dat de variabele wordt aangegeven in een ander dossier en dus extern wordt gebruikt

bv
file1.c

extern int a; / / een gebruikt in dit bestand, maar verklaarde someother bestand
int b;

functie-instelling;

file2.c

extern int b; / / b gebruikt in dit bestand aangegeven andere file
int a;

functie-instelling;

 
Wees voorzichtig wanneer waarbij de lokale en globale variabelen met dezelfde naam, want als het bewerken van een variabele in een functie met een lokale variabele verandert alleen de waarde van de lokale variabele en niet de een van de mondiale.
Voor meer informatie,
kijk dan in sommige C boek het hoofdstuk dat betrekking heeft op de reikwijdte van variabelen.
Hoop dat het geholpen,
Maddin

 
Eigenlijk zijn er 3 types van aangifte (als ik mij niet worng die zijn colled opslag specifiers in C):
wereldwijd - in bestand zonder statische zoekwoord.Het is mogelijk om verwijzing van andere bestanden.Geheugen toewijzing tijdens het compileren.
statische - gedefinieerd met statische zoekwoord.Enige functie in het bestand waar het wordt omschreven kan verwijzen.Geheugen toewijzing gebeurt tijdens het compileren
tijdelijk.Gedefinieerd in functie.Alleen functioneren wanneer dit var wordt gedefinieerd kan verwijzen naar deze variabele.
Toewijzing gebeurt tijdens functie cacll en ususally gestapeld geheugen plaats.

Als u wqould willen definiëren var buiten de functie dient u ervoor te zorgen volgende:
a.Als er 2 functie gesprekken tegelijk
(onderbreken of RTOS gevallen), is er mogelijkheid dat er interferentie en een functie-oproep kunt zijn waarde, terwijl een andere functie oproep werd niet verwacht te hebben.In dat geval wordt de fucntion heet nonreentrant.Te kunnen functioneren reentrant (meer dan een oproep voor dezelfde fucntion tegelijk) moet u:
1.de vars als tijdelijke (stack toegewezen)
2.Als je gebruik maakt van statische of globale variabelen, de bescherming van de toegang tot deze vars via interrupts uitschakelen bij het benaderen van deze en mogelijk na alle werk met die gedaan is.

 
Bedankt jongens, ik lijken te hebben begrepen het verschil tussen statische en Global.Ook bedankt voor wijzen mogelijk RTOS probs.Much appreciated.

 

Welcome to EDABoard.com

Sponsor

Back
Top