Skocz do zawartości

Nietypowe deklaracje zmiennych


Pomocna odpowiedź

Gość
24 minuty temu, ethanak napisał:

Zresztą - ja przecież też tak zaczynałem Nie wiem jak inni...

O to właśnie się rozchodzi. Ja najpierw staram się zrobić coś na pokazanych przykładach, a później kombinuję własne ćwiczenia. 

Na razie chcę zobaczyć jak działa najprostsza funkcja z podanego przykładu. O ile kod się kompiluje na czysto, tak wywala mi błąd przy odniesieniu się do return poprzez Serialptint.

#include <stdio.h>

void setup() {
  Serial.begin(9600);
}

int iloczyn (int x = 2, int y = 2)
{
  int iloczyn_xy;
  iloczyn_xy = x*y;
  return iloczyn_xy;
}

void loop() {

Serial.print(iloczyn_xy);
}

Teoretycznie powinienem otrzymać wartość 4 ,a jest błąd kompilacji.

Serial.print(iloczyn_xy);
              ^~~~~~~~~~
              iloczyn
exit status 1
'iloczyn_xy' was not declared in this scope

Że niby mam niezadeklarowaną zmienną. Na pewno coś źle wpisuję, albo coś jest w złym miejscu, ponieważ podany przykład który skopiowałem raczej jest czysto w języku C. Nie ma w nim funkcji setup i pętli głównej loop. 

48 minut temu, rafal220 napisał:

Że niby mam niezadeklarowaną zmienną.

Bo masz.

Deklaracja zmiennej dokonana wewnątrz funkcji jest ważna tylko w tej funkcji. Zmienna iloczyn_xy jest zadeklarowana w funkcji iloczyn(), a więc niewidoczna w funkcji loop().

Pora przeczytać coś o zakresie działania zmiennych (variable scope), jak ktoś już wcześniej sugerował.

Gość
Przed chwilą, jand napisał:

Deklaracja zmiennej dokonana wewnątrz funkcji jest ważna tylko w tej funkcji.

No właśnie czytałem i tam pisało że wewnątrz funkcji liczy się tylko to co jest zadeklarowane w okrągłych nawiasach. Zresztą jeszcze potestuję. Zadeklaruję to na zewnątrz. 

5 minut temu, rafal220 napisał:

No właśnie czytałem i tam pisało że wewnątrz funkcji liczy się tylko to co jest zadeklarowane w okrągłych nawiasach. 

W klamrowych chyba😉 zmienne globalne/lokalne... poczytać 

Gość

P.S.

Teraz zadeklarowałem to na zewnątrz, ale otrzymuję wartość "0" Tak samo jest 0 wewnątrz funkcji int.

#include <stdio.h>

int iloczyn_xy;

void setup() {
  Serial.begin(9600);
}

int iloczyn (int x = 2, int y = 2)
{
  iloczyn_xy = x*y;
  return iloczyn_xy;
}

void loop() {

Serial.println(iloczyn_xy);

delay(100);
}

 

52 minuty temu, ethanak napisał:

Znajdź sobie w katalogu arduino plik main.cpp - będziesz wiedział (albo i nie) jak to działa.

Jak są tam jakieś przykłady, to zobaczę poprawną składnię. 

Gość

 Taki był podany przykład na początku poradnika. W tych poradnikach przykłady powinny być opisane w taki sposób, że wystarczy wkleić i obserwować co się dzieje, a nie domyślać się czemu podany przykład nie działa. itd.

5 minut temu, farmaceuta napisał:

Nie wierzę😋 podaj link to sprawdzę czy ktoś taki błąd popełnił...😉

też chciałbym zobaczyć tego gniota 😄

  • Lubię! 1
Gość
6 minut temu, farmaceuta napisał:

Nie wierzę😋 podaj link to sprawdzę czy ktoś taki błąd popełnił...😉

Linki podał wcześniej @H1M4W4R1 

Wiesz na razie zaczynam od pierwszego przykładu.  Dalszych bardziej złożonych jeszcze nie analizowałem. 

Chcę zobaczyć jak to działa samo w sobie w najprostszej postaci.

1 godzinę temu, ethanak napisał:

Znajdź sobie w katalogu arduino plik main.cpp

A to jest jakiś plik  odnoszący się do zainstalowanych bibliotek? 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
using namespace std;

 

15 minut temu, rafal220 napisał:

W tych poradnikach przykłady powinny być opisane w taki sposób, że wystarczy wkleić i obserwować co się dzieje

Dla przykładów z poradników przeznaczonych dla Arduino IDE tak będzie. Jest ich mnóstwo.

Inne trzeba lekko dostosować.

(edytowany)
27 minut temu, rafal220 napisał:

Jak są tam jakieś przykłady, to zobaczę poprawną składnię. 

int iloczyn(int x, int y); // Deklaracja

void setup() 
{
    Serial.begin(9600);
}

void loop() 
{
    Serial.println(iloczyn(2, 2));
    delay(100);
}

int iloczyn(int x, int y) // Definicja
{
    return x * y;
}

Zacznij od czegoś w tym stylu

Edytowano przez H1M4W4R1
Gość

 

 

3 minuty temu, H1M4W4R1 napisał:

Zacznij od czegoś w tym stylu

A to w ten sposób idzie... To już trochę komplikuje sprawę, bo gdybym miał więcej podobnych funkcji, to będę to musiał podobnie porozrzucać po całym kodzie. A już myślałem, że całą funkcję da się tak fajnie zrobić w jednym miejscu jak to było przedstawiane w przykładzie z kursu.   

14 minut temu, _LM_ napisał:

też chciałbym zobaczyć tego gniota 😄

To jest kawałek z wikibooks więc raczej tam nie ma błędów...poprostu kolega @rafal220 nie wie (lub mam nadzieję że tylko zapomniał) że funkcje trzeba wywołać żeby kod w niej się wykonał 😉

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...