Pętla nazwy użytej w dyrektywie #define

0

Witam.
Stawiam pierwsze kroki z programowaniem. Obejrzałem kilka filmów Mirosława Zelenta, oraz przeczytałem kurs forbot o programowaniu raspberry.
Chciałbym zrobić prosty program w języku C++, w którym zmieniając nazwę numeru pinu w dyrektywie preprocesora define, w dalszej części nazwę tą będę mógł użyć do pętli.
Poniżej wklejam krótki zarys kodu. Docelowo kolejne wyjścia mają uruchomić się po odczekaniu 500ms. Czy idę dobrym tropem ?

#include <iostream>
#include <stdio.h>
#include <wiringPi.h>
#define LED1    1
#define LED2    6
#define LED3    12

using namespace std;

int main()
{
    cout<<"Program uruchomiony"<<endl;
    wiringPiSetup();
    for (int i=1;i>=3;i++)               //  USTAWIENIE TRYBU PINÓW
    {
        pinMode(LED(i??),OUTPUT);
        delay(500);
    }
}

0

Tak się nie da. Zrób tablicę zawierającą wszystkie piny i po niej iteruj.

1

To też chyba nie pyknie:

for (int i=1;i>=3;i++) 
1

Idziesz bardzo złym tropem. Dyrektywa #define działa tak że **przed kompilacją ** podstawia stałą wartość zamiast zdefiniowanego tekstu w kodzie programu, pętla for z kolei zmienia wartość zmiennej i w runtime czyli w czasie działania programu. Użyj tablicy.

3

Już nie będę truł, że w C++ są stałe, a #define ma się prawie nie używać.
Czyli #define LED1 1 zmieniamy na

const int LED1 = 1;

BTW Zelent jest tu znany z luk w wiedzy i złego stylu.
Co do meritum problemu -> tablica

4

Makra z C to samo zło, którego należy unikać jak ognia.
Jest parę miejsc, gdzie makra nie mają alternatywy, ale to nie jest ten przypadek.

#include <iostream>
#include <stdio.h>
#include <wiringPi.h>

constexpr int LED1 = 1;
constexpr int LED2 =  6;
constexpr int LED3 = 12;

using namespace std;

int main()
{
    cout<<"Program uruchomiony"<<endl;
    wiringPiSetup();
    for (auto id : { LED1, LED2, LED3 })               //  USTAWIENIE TRYBU PINÓW
    {
        pinMode(id,OUTPUT);
        delay(500);
    }
}

W C++ można użyć metaprogramowania, co pozwoli na efekt jak z makrami, ale nie będę mącił ci w głowie.

Co do Zeleneta, to co jakiś czas pojawiają się ludzie, którzy mają pytania co do jego kursów i od czasu do czasu natrafiam i wytykam rażące błędy merytoryczne (ostatnio było to: https://4programmers.net/Forum/C_i_C++/336501-ciag_fibonacciego_problem_z_inf?p=1655655#id1655655 )

0
MarekR22 napisał(a):

Makra z C to samo zło, którego należy unikać jak ognia.
Jest parę miejsc, gdzie makra nie mają alternatywy, ale to nie jest ten przypadek.

#include <iostream>
#include <stdio.h>
#include <wiringPi.h>

constexpr int LED1 = 1;
constexpr int LED2 =  6;
constexpr int LED3 = 12;

using namespace std;

int main()
{
    cout<<"Program uruchomiony"<<endl;
    wiringPiSetup();
    for (auto id : { LED1, LED2, LED3 })               //  USTAWIENIE TRYBU PINÓW
    {
        pinMode(id,OUTPUT);
        delay(500);
    }
}

W C++ można użyć metaprogramowania, co pozwoli na efekt jak z makrami, ale nie będę mącił ci w głowie.

Co do Zeleneta, to co jakiś czas pojawiają się ludzie, którzy mają pytania co do jego kursów i od czasu do czasu natrafiam i wytykam rażące błędy merytoryczne (ostatnio było to: https://4programmers.net/Forum/C_i_C++/336501-ciag_fibonacciego_problem_z_inf?p=1655655#id1655655 )

Dziękuję wszystkim za pomoc ;)

Co do nauki c++... Zakupiłem książkę "Język C++. Szkoła programowania" Stephen Prata. Czy jest to książka warta uwagi, dzięki której nauczę się czegoś pożytecznego? Czy radzilibyście mi jakiś inny, lepszy sposób, oczywiście poza takimi mini projektami wykonywanymi samodzielnie ?

1
Michał Anonim napisał(a):

Co do nauki c++... Zakupiłem książkę "Język C++. Szkoła programowania" Stephen Prata. Czy jest to książka warta uwagi, dzięki której nauczę się czegoś pożytecznego? Czy radzilibyście mi jakiś inny, lepszy sposób, oczywiście poza takimi mini projektami wykonywanymi samodzielnie ?

Nie jest zła, ale -- jak na mój gust i moje podejście do C++ -- za bardzo trąci C... Prata na samym początku (rozdział 4 z 18 plus 10 dodatków) porusza sprawę surowych tablic (w stylu C) oraz surowych wskaźników. Żeby dobrze programować w C++, naukę tych rzeczy (IMHO) należy przenieść na duuużo później, bo -- owszem, trzeba to umieć, ale w C++ używać należy jak najrzadziej...

3

Prata ma średnie recenzje, ale na pewno są gorsze książki. Jak zawsze, polecam tę listę: https://stackoverflow.com/a/388282/2456565

1 użytkowników online, w tym zalogowanych: 0, gości: 1