<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=22934&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-03-18T13:08:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22934&amp;mode</id>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2020-03-18T13:08:57+01:00</updated>
<published>2020-03-18T13:08:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225420#p225420</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225420#p225420"/>
<title type="html"><![CDATA[Re: Wyświetlanie zmiennej enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225420#p225420"><![CDATA[
<div class="quotetitle">landrynek napisał(a):</div><div class="quotecontent"><br />to jest chyba jakiś extension w GCC<br /></div><br />Od C99 w standardzie<br /><br /><div class="quotetitle">landrynek napisał(a):</div><div class="quotecontent"><br />Można też użyć preprocesora:<br /></div><br />czyli tzw. X-MACRO. Jeśli ciągi mają być we FLASH:<br />[syntax=c]#define FOREACH_FRUIT(FRUIT) \<br />            FRUIT(Forward)   \<br />            FRUIT(Backward)  \<br />            FRUIT(grape)   \<br />            FRUIT(banana)  \<br /><br />    #define GENERATE_ENUM(ENUM) ENUM,<br />    #define GENERATE_ARR(STR) char const str_##STR&#91;&#93; PROGMEM= #STR;<br />    #define GENERATE_STRING(STRING) str_##STRING ,<br /><br />    enum status {<br />        FOREACH_FRUIT(GENERATE_ENUM)<br />    } idx = grape;<br /><br />    FOREACH_FRUIT(GENERATE_ARR)<br /><br />    static const char *enames&#91;&#93; PROGMEM = {<br />        FOREACH_FRUIT(GENERATE_STRING)<br />    };[/syntax]<br /><br />albo<br /><br />[syntax=c]#define FOREACH_ENAME(ENAME)\<br />ENAME(Forward)\<br />ENAME(Backward)\<br />ENAME(Stop)<br /><br />#define GEN_ENUM(ENUM) ENUM,<br />#define GEN_STR(STR) &#91;STR&#93;= (char __flash const * __flash const){ #STR },<br /><br />enum status { FOREACH_ENAME(GEN_ENUM) } idx = Stop;<br /><br />static char _flash const * _flash const enames&#91;&#93; = {<br />FOREACH_ENAME(GEN_STR)<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 18 mar 2020, o 13:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[landrynek]]></name></author>
<updated>2020-03-17T23:39:37+01:00</updated>
<published>2020-03-17T23:39:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225418#p225418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225418#p225418"/>
<title type="html"><![CDATA[Re: Wyświetlanie zmiennej enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225418#p225418"><![CDATA[
Chyba to co pokazał fofex to jest chyba jakiś extension w GCC, tak?<br /><br />Można też użyć preprocesora:<br />[syntax=c]#define FOREACH_FRUIT(FRUIT) \<br />        FRUIT(apple)   \<br />        FRUIT(orange)  \<br />        FRUIT(grape)   \<br />        FRUIT(banana)  \<br /><br />#define GENERATE_ENUM(ENUM) ENUM,<br />#define GENERATE_STRING(STRING) #STRING,<br /><br />enum FRUIT_ENUM {<br />    FOREACH_FRUIT(GENERATE_ENUM)<br />};<br /><br />static const char *FRUIT_STRING&#91;&#93; = {<br />    FOREACH_FRUIT(GENERATE_STRING)<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21329">landrynek</a> — 17 mar 2020, o 23:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2020-03-17T20:26:37+01:00</updated>
<published>2020-03-17T20:26:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225414#p225414</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225414#p225414"/>
<title type="html"><![CDATA[Re: Wyświetlanie zmiennej enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225414#p225414"><![CDATA[
[syntax=c]#define ENAME(name) #name<br /><br />enum status { Forward, Stop, Backward } idx = Stop;<br /><br />static char const * const enames&#91;&#93; = {<br />&#91;Forward&#93;= (char const * const){ ENAME(Forward) },<br />&#91;Stop&#93;= (char const * const){ ENAME(Stop) },<br />&#91;Backward&#93;= (char const * const){ ENAME(Backward) },<br />};<br /><br /><br />void print_ename(enum status evar)<br />{<br />#include &lt;stdio.h&gt;<br />printf(&quot;%s\n&quot;,enames&#91;evar&#93;);<br />}<br /><br />int main()<br />{<br /><br />print_ename(idx);<br />idx = Forward;<br />print_ename(idx);<br />idx = Backward;<br />print_ename(idx);<br /><br />//weak type control - memory violation<br />idx = 5;<br />print_ename(idx);<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 17 mar 2020, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2020-03-17T19:23:24+01:00</updated>
<published>2020-03-17T19:23:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225413#p225413</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225413#p225413"/>
<title type="html"><![CDATA[Re: Wyświetlanie zmiennej enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225413#p225413"><![CDATA[
Nie jestem pewien o co ci chodzi. Ale może użyj tablicy, w której zapiszesz to samo co w &quot;enum&quot; z tymi samymi|(idx) .Do każdej przypisanej nazwy masz wtedy (idx) tablicy , no chyba że nie rozumiem o co ci chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 17 mar 2020, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2020-03-17T19:04:05+01:00</updated>
<published>2020-03-17T19:04:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225411#p225411</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225411#p225411"/>
<title type="html"><![CDATA[Wyświetlanie zmiennej enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22934&amp;p=225411#p225411"><![CDATA[
Witam<br />Powiedzmy, że tworzę typ enum zawierający trzy elementy:<br />[syntax=c]enum status {Forward, Stop, Backward};[/syntax]<br /><br />oraz zmienną idx i od razu ją inicjalizuję: <br />[syntax=c]enum status idx = STOP;[/syntax]<br /><br />Teraz chciałbym wyświetlić sobie tą zmienną idx ( np w terminalu, przez RS232) ale tak by była widoczna jej nazwa. Z BB Mirka wiadomo iż wartości enumerowane przypisywane są kolejno ( o ile nie będziemy ingerować) poczynając od 0. Tak więc nie ma problemu z wyświetleniem idx jako&quot;1&quot;. Jednak ja chciałbym wyświetlić &quot;STOP&quot;.<br />Oczywiście mogę stworzyć konstrukcję typu:<br /><br />[syntax=c]switch(idx)<br />   {<br />   case 0 :<br />       string = &quot;FORWARD&quot;;<br />       break;<br />    <br />    case 1 :<br />       string = &quot; STOP&quot;;<br />       break;<br />     <br />     case 2 :<br />       string = &quot; BACKWARD&quot;;<br />     }[/syntax]<br /><br />ale wolałbym coś mniej przypominającego drapanie się lewą ręką w prawe ucho. Jest jakaś metoda na wywoływanie nazw podanych przy tworzeniu enum?<br />Pozdrawiam<br />W<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 17 mar 2020, o 19:04</p><hr />
]]></content>
</entry>
</feed>