Otázka:
Proč si lidé stěžují, když volám své funkce prázdné?
Nick Gammon
2018-03-23 10:45:07 UTC
view on stackexchange narkive permalink

Zveřejnil jsem otázky týkající se „smyčky mé neplatnosti“ nebo „nastavení mé neplatnosti“ a lidé si stěžují, že ve skutečnosti nejsou neplatné. Ale oni jsou! Viz tento příklad kódu:

  void setup () {pinMode (13, OUTPUT);} void loop () {digitalWrite (13, HIGH); // rozsvítí LED (HIGH je úroveň napětí) delay (1000); // čekání na druhou digitalWrite (13, LOW); // zhasne LED diodou zpožděním napětí LOW (1000); // počkejte chvíli}  

Je zřejmé, že nastavení a smyčka jsou neplatné, protože mají slovo void těsně před nimi!


Poznámka: toto je referenční otázka.

Omlouváme se, Nicku, ale tato referenční otázka vypadá spíš jako obecná otázka pro programování v C ++ (patřící tehdy k StackOverflow) než otázka Arduina, s výjimkou obsahu skutečných funkcí. Někteří členové mohou hlasovat pro uzavření tohoto druhu otázky jako „mimo téma“.
Ano, uvědomuji si to, ale uživatelé Arduina mají tendenci být začátečníky v programování obecně a zejména v C ++. Neustálé odkazy na „jazyk Arduino“ mě nutí myslet si, že by neměli uvažovat o kontrole odpovědi StackOverflow. Ve skutečnosti jde o řešení problému, který si začátečníci možná ani neuvědomují, že existuje (terminologie). Zveřejněním těchto otázek a odpovědí se pokouším poskytnout referenční bod pro lidi, kteří mluví o svém problému „neplatné smyčky“.
Nechápejte mě špatně, neurážám lidi, kteří neznají C ++. Byly doby, kdy jsem neměl nejmenší představu o C nebo C ++. Dříve jsem používal Turbo Pascal a byl jsem zvyklý na deklarace procedur a funkcí a myslel jsem si, že C má velmi podivnou syntaxi. A před Turbo Pascal je to úplně jiný příběh. :)
Nebojte se, Nicku, bez rizika, že se zmýlím, jste jednou z mých rockových hvězd elektroniky (opravdu si vážím vašich příspěvků o elektronice na vašem webu)! Souhlasím s tím, že mnoho nováčků v Arduinu sem nejprve přijde kvůli otázce C ++. Můj komentář byl spíše o tom, jak by někteří členové Arduino.SE (včetně mě) mohli na takovou otázku reagovat a považovat ji za mimo téma. Neberte to ve zlém!
Vůbec žádná! (Udělal jsem faktickou chybu ve své odpovědi, kterou jsem ocenil, když měl Edgar Bonet pravdu).
nikdo nepochopí, o čem to mluvíte, pokud jste jediný, kdo se řídí touto „konvencí“
Dva odpovědi:
Nick Gammon
2018-03-23 10:45:07 UTC
view on stackexchange narkive permalink

Pro začátečníky v C ++ je to snadná chyba. Podívejme se na další jazyky, například na PHP:

  funkce add ($ a, $ b) {return $ a + $ b; }  

Nebo Lua:

  funkce add (a, b) vrací + ohyb  

Nebo JavaScript:

  funkce add (a, b) {return a + b; }  

Nebo VBscript:

  Funkce add (a, b) add = a + bEnd Funkce  

Všechny tyto jazyky mají slovo „function“, které označuje, že deklarujete funkci.


Jak tedy vypadá C ++:

int add (int a, int b) {return a + b; }

Takže to musí být „int“, ne? Nebo co když nevrátí hodnotu?

  void loop () {}  

Nyní je to „void“? Druh podivného názvu funkce!

Ve skutečnosti int a void v těchto příkladech nejsou podivné názvy funkcí. Jedná se o návratové typy těchto funkcí. int add (int a, int b) je funkce , která vrací int. A void loop () je funkce , která nic nevrací.

Kompilátor C ++ může odvodit, když vidí deklaraci funkce z některých vodítek:

  • Návratový typ (např. int, float, long)
  • Název (název funkce)
  • Některé závorky (pro argumenty funkce)

Představte si, že slovo function je zde v duchu:

  int [function] add (int a, int b ) ^^^^^^^^^^ < - ve skutečnosti to nezadávejte! {návrat a + b; }  
omlouvám se, to není Java v poli kódu za štítkem Java. Java má mezery :-)
Změnil to na čtení JavaScriptu. :)
nPn
2018-03-23 19:24:48 UTC
view on stackexchange narkive permalink

Myslím, že pokud použijete frázi jako „můj int a nebo můj CustomType a“, lidé by tyto fráze interpretovali tak, že máte proměnnou a , která je instancí int nebo CustomType.

Podle http://en.cppreference.com/w/cpp/language/types můžete Nemám objekt ani odkaz typu void.

Pokud máte frázi jako „moje nastavení neplatnosti“, myslím, že by se to většina lidí pokusila přečíst tak, že naznačuje, že máte proměnná nastavení typu void , což podle mě nemá smysl, pro většinu lidí.

Co vlastně máte, je toto:

  void setup () {...}  

Myslím, že většina lidí by to frázovala jako „moje nastavení funkce, které nevyžaduje žádné argumenty, nevrací nic“.

zmeškal jste poznámku?
Myslím, že ano, a později jsem si všiml, že stejná osoba na ni odpověděla, jak se jí zeptala, což vypadalo divně. Nikdy jsem neviděl ani neslyšel o takové věci, jako je „referenční otázka, alespoň ne na StackOverflow, je to někde zdokumentováno? Hledal jsem na meta webu a nenašel jsem ho.
Viz [Mohu odpovědět na svou vlastní otázku?] (Https://arduino.stackexchange.com/help/self-answer) a [Je v pořádku ptát se a odpovídat na vaše vlastní otázky] (https://stackoverflow.blog/2011/ 07/01 / its-ok-to-ask-and-answer-your-own-questions /). Z toho: ** není jen v pořádku ptát se a odpovědět na svou vlastní otázku, je * výslovně doporučeno. ***
Díky, myslím, že jsem viděl případy, kdy lidé odpověděli na svou vlastní otázku, __ poté, co našli řešení, ale ne tento typ případu. Vidím případy, kdy by to byla přidaná hodnota. Ale myslím, že nevidím smysl někoho, kdo by poukazoval na skutečnost, že se jedná o „referenční“ otázku, koneckonců otázka je otázkou a někdo může mít stále lepší odpověď než ten, kdo ji položil.
Určitě můžete přidat lepší odpověď. Nezveřejněním, že se jedná o referenční otázku, by se však lidé mohli divit, proč se někdo ptá, co se zdá být jednoduchou otázkou, a poté si na ni sám odpoví. Poprvé jsem udělal, že jsem dostal stížnosti v tomto duchu. :)
@nPn, ale pověst 25 300+ bodů a diamantový symbol správce


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...