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

Odpowiednik zmiennych statycznych w makrach C/C++

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
138 wizyt
pytanie zadane 25 marca w C i C++ przez whiteman808 Gaduła (4,760 p.)
edycja 27 marca przez whiteman808

Jak zrobić odpowiednik zmiennych statycznych bez lączności w zwykłych funkcjach C++ przy użyciu makr preprocesora? Przepraszam za ciągłe wstawianie pytań dzisiaj ale dopiero poznaję C++

#include <iostream>

int test_successes = 0;
int test_failures = 0;

void test_assert(bool expr, std::string_view msg) {
    if (expr) {
        std::cout << "* test passed: " << msg << std::endl;
        ++test_successes;
    } else {
        std::cout << "* test failed: " << msg << std::endl;
        ++test_failures;
    }
}

void test_stats() {
    std::cout << "successes: " << test_successes << std::endl;
    std::cout << "failures: " << test_failures << std::endl;
}

int main() {
    test_assert(2 == 2, "2 == 2");
    test_assert(2 < 0 == false, "2 < 0 == false");
    test_assert(1 == 3, "1 == 3");
    test_stats();
    return 0;
}
komentarz 27 marca przez adrian17 Mentor (354,120 p.)
Też niezbyt rozumiem co chcesz tym zrobić.
komentarz 27 marca przez mokrowski Mędrzec (158,660 p.)
A ja nie rozumiem w jakim celu? Pytasz "czy się da" czy "mam powód do poszukiwania takiej techniki/właściwości"?
komentarz 27 marca przez whiteman808 Gaduła (4,760 p.)
Chcę w makrze inkrementować zmienną globalną. Ta zmienna ma mieć wartość 0 kiedy nie została jeszcze użyta
komentarz 27 marca przez adrian17 Mentor (354,120 p.)
Ale do czego. Pokaż, do czego potrzebujesz taką rzecz.
komentarz 27 marca przez whiteman808 Gaduła (4,760 p.)
Chcę zliczać powodzenia i niepowodzenia w testach jednostkowych w makrach ASSERT, ASSERT_FALSE itd

Kod dodałem do pytania
komentarz 27 marca przez adrian17 Mentor (354,120 p.)
OK, ale makra tutaj nic nie mają do rzeczy. Zastanów się jak byś to zapisał bez makra, a dopiero potem owiń powtarzający się kod w makro.
komentarz 27 marca przez whiteman808 Gaduła (4,760 p.)
Edytowałem pytanie
komentarz 27 marca przez whiteman808 Gaduła (4,760 p.)
Chcę użyć makr by nie musieć pisać test_assert(2 < 3, "2 < 3"); tylko użyć makra ASSERT(2 < 3);, które przekazałoby 2 < 3 do zmiennych expr i msg.

1 odpowiedź

0 głosów
odpowiedź 26 marca przez WojAbuk Gaduła (3,280 p.)
Tworzenie zmiennych zmiennych w makrach to nie jest dobry pomysł. Ogólnie w C++ używanie makr nie jest zalecane w C++ lepiej jest używać szablonów.

Makra to element pre-procesora, a pre-procesor to narzędzie do manipulacji tekstem i z tego co wiem w czystym C nie ma nic co pozwoliło by na utworzenie zmiennej statycznej która by działała tak jak w funkcji.

Podobne pytania

0 głosów
3 odpowiedzi 539 wizyt
pytanie zadane 23 kwietnia 2017 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 6 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,490 p.)
0 głosów
1 odpowiedź 581 wizyt
pytanie zadane 26 kwietnia 2018 w C# przez Stami Gaduła (3,790 p.)

93,440 zapytań

142,432 odpowiedzi

322,679 komentarzy

62,802 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

...