• 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++

0 głosów
449 wizyt
pytanie zadane 25 marca w C i C++ przez whiteman808 Mądrala (5,430 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,800 p.)
Też niezbyt rozumiem co chcesz tym zrobić.
komentarz 27 marca przez mokrowski Mędrzec (158,940 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 Mądrala (5,430 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,800 p.)
Ale do czego. Pokaż, do czego potrzebujesz taką rzecz.
komentarz 27 marca przez whiteman808 Mądrala (5,430 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,800 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 Mądrala (5,430 p.)
Edytowałem pytanie
komentarz 27 marca przez whiteman808 Mądrala (5,430 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,320 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 600 wizyt
pytanie zadane 23 kwietnia 2017 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 6 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,490 p.)
0 głosów
1 odpowiedź 640 wizyt
pytanie zadane 26 kwietnia 2018 w C# przez Stami Gaduła (3,790 p.)

93,608 zapytań

142,531 odpowiedzi

323,004 komentarzy

63,101 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

Kursy INF.02 i INF.03
...