Область действия переменной и квалификаторы
Область действия переменной
Переменные в языке C имеют область действия переменной. Глобальные переменные видимы в любой функции программы. Локальные переменные видимы только для функции, в которой они были объявлены. В среде разработки Arduino глобальными, считаются все переменные объявленные вне функций.
Когда программа становится большой и более сложной, локальные переменные -являются отличным способом обезоапасить себя от лишних проблем, поскольку доступ к ним есть только у объявившей их функции. Это исключает ошибки модификации этой переменной другой функцией.
Иногда удобно объявлить переменную в теле цикла. В этом случае создается переменная, доступ к которой есть только внутри цикла.I
Пример:
int gPWMval; // глобальная переменная
void setup()
{
// ...
}
void loop()
{
int i; // "i" локальная переменная, видимая только для "loop"
float f; // "f" локальная переменная, видимая только для "loop"
// ...
for (int j = 0; j <100; j++){
// доступ к j есть толкьо внутри цикла.
}
}
Static
Слово Static используется для создания переменной, видимой только для одной фнукции. В отличие от уничтожаемой каждый раз при выходе из функции локальной переменной, эта остается объявленной.
Переменые, объявленные как Static будут созданы лишь однажды, при первом вызове функции.
Пример:
/* RandomWalk
* Paul Badger 2007
* RandomWalk wanders up and down randomly between two
* endpoints. The maximum move in one loop is governed by
* the parameter "stepsize".
* A static variable is moved up and down a random amount.
* This technique is also known as "pink noise" and "drunken walk".
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup()
{
Serial.begin(9600);
}
void loop()
{ // tetst randomWalk function
stepsize = 5;
thisTime = randomWalk(stepsize);
Serial.println(thisTime);
delay(10);
}
int randomWalk(int moveSize){
static int place; // variable to store value in random walk - declared static so that it stores
// values in between function calls, but no other functions can change its value
place = place + (random(-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // check lower and upper limits
place = place + (randomWalkLowRange - place); // reflect number back in positive direction
}
else if(place > randomWalkHighRange){
place = place - (place - randomWalkHighRange); // reflect number back in negative direction
}
return place;
}
Дата добавления: 2015-03-23; просмотров: 659;