Două întrebări pentru tine "C" guru

G

GrandAlf

Guest
Ca un nou venit relativ la C, am câteva întrebări pe care poate cineva să mă enlignten pe. Prima este atunci când o variabilă este declarată în afara oricăror funcții, am citit că acesta ar trebui să fie, de asemenea, declarate în orice funcție care-l folosește. Am constatat că funcționează foarte bine, fără a face acest lucru, știe cineva de ce acest lucru ar trebui să fie o cerință?. De asemenea, atunci când se utilizează un RTOS, și presupunând am o funcție în cadrul unei activități care nu utilizează variabilele externe, pot să-l numesc ca pe o funcție normală, sau există probleme de sincronizare în trecerea datelor înainte și înapoi. Orice opinii recunoștință primit.
 
atunci când o variabilă este declarată dintr-o funcție este o variabilă globală și poate fi numit sau a trecut la orice funcție atunci când o variabilă este declarată în interiorul unei funcții, este local pentru această funcție numai. u nu trebuie să re declare funcția gloval în interiorul oricărui alt fn ca atunci când treci o variabilă u îl folosește. corectați-mă dacă IAM greșit
 
Sunt de acord cu tine EcraZ, ele lucreaza bine ca aceasta, ei doar că, în cartea ANSI C, se spune variabila externa ar trebui să fie, de asemenea, declarat în funcions care le folosesc?. Habar n-am!
 
Variabilele externe sunt declarate într-un singur fișier, dar utilizate într-un alt fișier compilatorul trebuie să știe că variabila este declarată într-un alt dosar și, astfel extern este folosit de exemplu extern file1.c int-o ;/ / un int folosit în acest dosar, dar a declarat fișier someother b, corpul funcției; extern file2.c int b ;/ / b utilizată în acest dosar a declarat int-un alt fișier, corpul funcției;
 
Ahh, am înțeles acum. Trăim și învață. Multumesc EcraZ
 
Fiți atenți atunci când declararea variabilelor locale și globale utilizând același nume, deoarece atunci când se modifică o variabilă în funcție de modificările locale cu câțiva variabile doar valoarea unei variabile locale, și nu unul dintre globale. Pentru informații suplimentare, vă rugăm să verificați într-o carte C capitolul care acoperă domeniul de aplicare al variabilelor. Sper că a ajutat, Maddin
 
De fapt, există 3 tipuri de declarații (Dacă nu mă worng acestea sunt colled de stocare specificatorii în C): globale - definite în fișierul fără cuvinte cheie static. Este posibil să-l referire la alte fișiere. Alocarea de memorie la momentul compilării. static - definită cu cuvinte cheie statică. Funcționa numai în cazul în care dosarul este definită poate referi la ea. Alocarea de memorie se face la momentul compilarii temporară. Definite în funcție. Funcția Numai în cazul în care aceasta este definită var se poate referi la aceasta variabila. Alocarea se face în timpul cacll funcția și ususally în stivă loc de memorie. Dacă vă place să definească wqould var în afara funcției pe care ar trebui să asigure următoarele: o. în cazul în care nu poate să fie de 2 apeluri de funcții în același timp (de întrerupere sau de cazuri RTOS), nu există posibilitate ca va exista interferențe și un apel de funcție se poate modifica valoarea în timp ce un alt apel de funcție, nu mă așteptam să aibă acest lucru. În acest caz, se numește fucntion nonreentrant. Pentru a putea face funcția de reintrare (mai mult de un singur apel pentru fucntion același timp), trebuie să: 1. definesc ca fiind temporare Vars (alocat stiva) 2. Dacă utilizați variabile statice sau global, de a proteja accesul la aceste variabile prin dezactivarea întreruperilor la accesarea și care să permită celor la urma urmei de locuri de muncă cu cele a fost făcut.
 
Multumesc baieti, am par să fi înțeles greșit diferența dintre static și globală. De asemenea, mulțumiri pentru subliniind probs posibile RTOS. Mult apreciat.
 

Welcome to EDABoard.com

Sponsor

Back
Top