Как работает этот код?? val3 определяется как константа

const int val3 = 7;
void setup(){
  Serial.begin(9600);
  int val3 = 8;
  int val4 = 4;
  Serial.print(calc(val3,val4));
}

void loop() 
{}

int calc(int val1, int val2)
{
  return val1 + val2;
}

этот код дает результат 12.

, 👍0

Обсуждение

напечатать val3 в цикле(), @jsotola

Я вас не понял, можете еще раз пояснить., @Kakarot_1

вы используете второй int val3, определенный в setup(). он затеняет глобальный val3, @Juraj

@Akash, добавьте оператор Serial.print() в блок loop() ... распечатайте значение val3 ... что печатает в последовательном мониторе?, @jsotola


2 ответа


0

Вы объявили val3 два раза: один раз как константу int, а другой раз как int (в цикле установки). Замените оператор int val3=8 на val3 = 8. Вы почувствуете разницу.

Первое объявление в этом случае бесполезно. В качестве попытки вы можете сначала объявить val3 как int, а во втором объявлении вы можете объявить val3 как const int.

Просто попробуйте и обратите внимание на разницу. Удачного кодирования!

,

Спасибо, я понял., @Kakarot_1


3

В вашем коде определение const int val3 = 7; находится вне каких-либо функций, поэтому оно определяет глобальную константу/переменную (доступную в любой части вашего кода). код).

Определение int val3 = 8; находится внутри вашей функции setup(), поэтому оно действует как локальная переменная только внутри этой функции. . Это переопределяет константу val3, определенную вне функции setup(). Т.е. глобальная константа val3 и локальная переменная val3 внутри setup() не являются одной и той же переменной, что неизбежно приведет к путанице (т.к. в вашем случае).

Это допустимый синтаксис, но я не считаю его хорошей практикой написания кода. Однако полезно знать, почему это работает именно так.

,

Спасибо, я понял., @Kakarot_1