• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja deklarująca zmienną o nazwie podanej w argumencie

0 głosów
488 wizyt
pytanie zadane 11 września 2016 w C i C++ przez DarthMazut Bywalec (2,990 p.)
Witam,

Czy możliwe jest utworzenie funkcji, która w swoim ciele zawiera deklarację zmiennej globalnej (albo przynajmniej statycznej), a nazwa tej zmiennej będzie podesłana w argumencie tej funkcji? Jeśli tak to jakby to wyglądało w C++?

Pozdrawiam.
komentarz 11 września 2016 przez unknown Nałogowiec (39,560 p.)

Czy możliwe jest utworzenie funkcji, która w swoim ciele zawiera deklarację zmiennej globalnej (albo przynajmniej statycznej), a nazwa tej zmiennej będzie podesłana w argumencie tej funkcji?

A po co ci to?

komentarz 11 września 2016 przez DarthMazut Bywalec (2,990 p.)
Wiesz, jestem początkujący i czytając kurs C++ przyszło mi do głowy takie pytanie, a że nie umiałem znaleźć odpowiedzi nigdzie indziej to pomyślałem, że zapytam? :)

Szkoda, że w swoim poście nie odnosisz się bezpośrednio do pytania i nie wnosisz nic nowego do wątku, tylko próbujesz podważyć jego zasadność :(
komentarz 11 września 2016 przez smh Obywatel (1,940 p.)
Właśnie dzięki pytaniu "A po co ci to?" możemy uniknąć wpadania w sidła "problemu XY" (http://xyproblem.info/).

2 odpowiedzi

0 głosów
odpowiedź 11 września 2016 przez Avernis Nałogowiec (27,400 p.)
Podczas kompilacji nie ma już nazw zmiennych itp, więc raczej się nie da. Możesz najwyżej zrobić fstreamem nową zmienną w kodzie i skompilować jeszcze raz
0 głosów
odpowiedź 11 września 2016 przez smh Obywatel (1,940 p.)

Zrobiłbyś tak z makrami, ale stanowczo je odradzam – makra z definicji nie rozumieją kodu.
Możesz jednak zamiast tego (na przykładzie liczenia kwadratu):

void defineVariableAsSquare(int x, string NAME) {
  int NAME = x*x; // kod niepoprawny
}
//...
int main() {
  defineVariableAsSquare(3, "asdf");
}

zrobić tak:

int computeSquare(int x) {
 return x*x;
}
//...
int main() {
  int asdf = computeSquare(3);
}

czyli zastąpić "zwracanie" do definiowanej zmiennej prawdziwym zwracaniem.

komentarz 11 września 2016 przez DarthMazut Bywalec (2,990 p.)
Czyli, z tego co rozumiem, tak naprawdę nie da się przekazać nazwy zmiennej (do utworzenia) w argumencie?
komentarz 11 września 2016 przez Avernis Nałogowiec (27,400 p.)

Da się tylko makrem:

#define var BardzoFajnaZmienna

void x()
{
    int var = 0;
    std::cout << BardzoFajnaZmienna;
}

Ale takie rozwiązanie cię chyba niezbyt interesuje

komentarz 11 września 2016 przez DarthMazut Bywalec (2,990 p.)
No nie chodziło mi o definiowanie na sztywno :)

Podobne pytania

0 głosów
1 odpowiedź 490 wizyt
pytanie zadane 9 lutego 2023 w JavaScript przez niezalogowany
0 głosów
2 odpowiedzi 1,248 wizyt
pytanie zadane 13 maja 2020 w C i C++ przez Jakub Michalik Użytkownik (850 p.)
0 głosów
1 odpowiedź 456 wizyt

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,323 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...