Skocz do zawartości

Czy język programowania dla Arduino to C czy nie C bo zgłupiałem


Pomocna odpowiedź

Napisano

Witajcie

Oglądam sobie na yetubie:)) kurs programowania w C. Prowadzący stwierdził w jednym z odcinków, że w C nie ma typu danych bool. Zajrzałem do Wikipedii i znalazłem tabelkę z typami danych gdzie jak byk stoi, że od 1999 po #include <stdbool.h>  w ANSI C mamy dostępny typ danych bool. W referencjach  w IDE dla Arduino znalazłem typ boollean. Po tych wszyskich sprawdzeniach mam taki młyn w mózgu, że aż strasznie i śmiesznie jednocześnie. Może mi ktoś wyjaśnić jak to naprawdę jest z tym C dla Arduino, najlepiej prosto PROSZE

Witajcie 

Jeszcze takie uzupełnienie.

Jeżeli w C główną funkcją jest MAIN, a w strukturze programu napisanego w IDE dla Arduino taka funkcja nie występuje to według mnie następuje "delikatnie mówiąc" rozdwojenie jaźni, które prowokuje do tego typu dywagacji. 

 

(edytowany)
11 godzin temu, Wojtek65 napisał:

jak to naprawdę jest z tym C dla Arduino

Naprawdę to jest tak, że nie jest to C tylko C++. Podobny, owszem, ale to nie to samo.

Jest pewna różnica: Arduino IDE dodatkowo przetwarza Twój plik "*.ino" na czysty C++, dodając pewnie niezbędne "ułatwienia". Takie najważniejsze to automatyczne dopisanie deklaracji wyprzedzających funkcji. Osobiście podchodzę z nieufnością do tych ułatwień, bo uczą złych nawyków, ale na szczęście można traktować plik .ino jak zwykły plik C++ i pisać normalnie.

 

9 godzin temu, Wojtek65 napisał:

Jeżeli w C główną funkcją jest MAIN, a w strukturze programu napisanego w IDE dla Arduino taka funkcja nie występuje

Ależ występuje! Jeśli dobrze poszukasz, to w katalogu <arduino>\hardware\arduino\avr\cores\arduino (gdzie <arduino> to katalog gdzie jest zainstalowane Arduino IDE) znajdziesz plik "main.cpp". Po prostu autorzy Wiringa (z którego wyewoluowało Arduino IDE) założyli, że funkcje setup() i loop() są bardziej naturalne i najczęściej wykorzystywane, toteż zrobili bardzo ciężką robotę i napisali funkcję main() za nas. Na szczęście możemy napisać własną funkcję main() - wtedy plik main.cpp zostanie po prostu pominięty.

To tak w skrócie.

 

Edytowano przez ethanak
  • Lubię! 1

Możesz rozwinąć o co chodzi z tym "uproszczenie konstruktora funkcji" ?

Pierwszy raz słyszę, żeby w C++ było coś źle z pustą linią parametrów np. void setup()

(edytowany)

Hm... nie pamiętam skąd się to wzięło, mój błąd że nie sprawdziłem. Już wywaliłem z posta.

Przepraszam, ale jeszcze powoli z covida wychodzę i czasem mi się coś chrzani (jak w tym przypadku) 😞

Edytowano przez ethanak
  • Lubię! 2

Ok, po prostu mnie to bardzo zaskoczyło 🙂

Z tego co wiem pusta lista parametrów to jeden z niewielu przykładów, gdzie występuje różnica między C, a C++ w pozornie identycznym kodzie.

W przypadku C++ oba zapisy oznaczają to samo:
 

void setup(void);
void setup();

Czyli zarówno z void, jak i bez jest to funkcja bez parametrów.

Natomiast w języku C pierwsza wersja, czyli z void też oznacza funkcję bez parametrów, ale druga już nie - to jest funkcja z nieokreśloną liczbą parametrów. Czyli jeśli gdzieś w kodzie napiszemy:

setup(5);

To kompilator C++ od razu zgłosi błąd, natomiast w C będzie to nadal poprawny składniowo program.

Ale człowiek całe życie się uczy, więc chętnie się dowiem jeśli jednak jest inaczej - to niby ciekawostki, ale czasem bywają przydatne. Albo chociaż fajnie je znać żeby nie dać się zagiąć na rozmowie o pracę.

34 minuty temu, ethanak napisał:

ale jeszcze powoli z covida wychodzę i czasem mi się coś chrzani (jak w tym przypadku) 😞

@ethanak dużo zdrowia, wracaj do pełni sił ❤️ 

  • Lubię! 1

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...