Automatyczne nazwy zmiennych - operator##

0

Powiedzmy, że potrzebuje zmienne:
a0 a1 a2 ... a1000
a ogólniej mówiąc - chce utworzyc zmienną o nazwie ai gdzie i jest liczbą naturalną. Nie można tego zrobić poprzez operator##, a przynajmniej ja nie widzę takiej możliwości. Wiem, że istnieją tablice, ale ja sobie ubzdurałem, że chcę zmienne. Da się to zrealizować?

1

@_13th_Dragon Tak, wiem, ale trzeba podać konkretną wartość, dla:
#define costam(x) a ## x int i = 19; int costam(i);
dostane ai, a chcę a19.
@Shalom proponuje nie krytykować niczego, czego nie rozumiesz dogłębnie. Mógłbym wytłumaczyć sens mojego działania, ale nie o to chodzi. Więc jeśli nie znasz odpowiedzi na moje pytanie - daruj sobie tak infantylne i bijące idiotyzmem na kilometry komentarze. Dziękuję ;)
Ewentualnie propozycja numer 2 jeśli Twoje ambicje nie pozwalają Ci czasem zatrzymac głupoty dla siebie - zapytaj, po co mi to. Może odpowiem. Może zrozumiesz.

0

@pingwindyktator Ani @Shalom ani @_13th_Dragon nie nazwali Cie idiotą

Tak. Należy uderzać głową o ścianę aż do utraty przytomności. Proces powtarzać aż wybijesz sobie takie pomysły z głowy

Wydaje mi się że autor miał na myśli że to jest nie najlepszy sposób xd niezależnie od tego czemu ma to służyć ;)
Chcą Ci pomóc i poświęcają na to swój prywatny czas więc proszę nie rzucaj się na wszystkich dookoła tylko to uszanuj ;) Jeśli nie wiesz czemu @Shalom napisał tak a nie inaczej to w następnym poście wytłumacz dokładnie do czego chciałeś to użyć i poproś o wytłumaczenie dlaczego uważa że jest to głupi pomysł i tyle ;)

1

@pingwindyktator nie chciałem żebyś poczuł się urażony, ale bardzo powszechną sytuacją na forum, szczególnie wśród początkujących i średnio-zaawansowanych, jest pytanie "jak zrobić XYZ" gdzie XYZ to jakaś bardzo dziwna i karkołomna operacja. W rzeczywistości jednak autorzy tych tematów wcale nie potrzebują takiego dziwnego rozwiązania, tylko akurat na takie dziwne rozwiązanie wpadli. W praktyce rozwiązanie ich problemu jest trywialne i nie wymaga wcale cudów na kiju, ale oni zamiast spytać "jak rozwiązać taki a taki problem" pytają "jak wykonać pewną karkołomną operację która jest mi potrzebna".

Przykład takiego dziwnego pomysłu:

  • Nieznajomość zagadnienia baz danych i utworzenie np. kilkudziesięciu / kilkuset tabel, po jednej dla każdego użytkownika, bo autor nie umiał zrobić powiązania 1:n i jednej tabeli z użytkownikami. Pytanie na forum nie dotyczyło poprawnego schematu bazy, tylko "jak jednym zapytaniem wybrać loginy użytkowników z tych 100 tabel"

Takie rzeczy są tu na porządku dziennym i jeśli twoje pytanie nie było "czysto akademickie" to jestem pewien że zalicza się do kategorii o której wspomniałem powyżej -> próba zaimplementowania dziwnego pomysłu, podczas gdy poprawne rozwiązanie wcale nie wymaga takich cudów.

1

@pingwindyktator wytłumacz po co? Tablice stworzone są właśnie w takim celu, aby łatwo było przechodzić "po zmiennych" pętlami. Jak chcesz zadeklarować 100 zmiennych to sobie je zadeklaruj metodą Kopiego Pejsta później 100 razy wykonuj na nich obliczenia a na końcu 100 razy wypisz...
Na dobrą sprawę mógłbyś zrobić to makrami, ale po co jak w skompilowanym programie nazwa i tak jest porzucana - to jest rzucanie sobie kłód pod nogi.

0

A co, jeśli moje pytanie sprowadza się do "chce znać możliwości języka"? Rozumiem, ze nie wpadliście na to i uznajecie, że kazdy, kto jest poza pierwszą dziesiątką w "rankingu" forum ma bezsensowne pomysły, ktore nadają się jedynie do krytyki?

0

Jak już musisz to sobie jakimś zewnętrznym skryptem wygeneruj ten 1000 zmiennych. Zgodnie z moją wiedzą nie jest to możliwe wewnątrz języka.

0

Pingwin napisał, że wie o istnieniu tablic, a zadał tylko pytanie o możliwość implementacji tego.
Ktoś kto ma trochę oleju w głowie i tak nie będzie próbował tak robić na 100 zmiennych więc nie zjeżdzałbym go, odpowiedź masz od Dragona lepszej nie znajdziesz.

0

Preprocesor działa w fazie kompilacji; Gdy już będziesz miał te zmienne, możesz się doń odwoływać podobnie w przypadku tablicy;

#include <iostream>
using namespace std;

auto main() -> signed int ??<
    int a0 = 1, a1 = 2, a2 = 3;
    cout << &a0 << " " << &a1 << " " << &a2 << endl;
    cout << (&a0+1) << ": " << *(&a0+1);
??>

Przykładowe wyjście:

0xbfb1ae44 0xbfb1ae48 0xbfb1ae4c
0xbfb1ae48: 2
0

Rozumiem, że jest to możliwe tylko dzięki preprocesorowi, czyli przed kompilacja? W trakcie działania programu nie?

1

W trakcie dzialania programu nie istnieje pojecie identyfikatora zmiennej.

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