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

Konkurs Mistrz Programowania
0 głosów
507 wizyt
pytanie zadane 25 marca 2025 w C i C++ przez whiteman808 Mądrala (5,490 p.)
edycja 27 marca 2025 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 2025 przez adrian17 Mentor (354,880 p.)
Też niezbyt rozumiem co chcesz tym zrobić.
komentarz 27 marca 2025 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 2025 przez whiteman808 Mądrala (5,490 p.)
Chcę w makrze inkrementować zmienną globalną. Ta zmienna ma mieć wartość 0 kiedy nie została jeszcze użyta
komentarz 27 marca 2025 przez adrian17 Mentor (354,880 p.)
Ale do czego. Pokaż, do czego potrzebujesz taką rzecz.
komentarz 27 marca 2025 przez whiteman808 Mądrala (5,490 p.)
Chcę zliczać powodzenia i niepowodzenia w testach jednostkowych w makrach ASSERT, ASSERT_FALSE itd

Kod dodałem do pytania
komentarz 27 marca 2025 przez adrian17 Mentor (354,880 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 2025 przez whiteman808 Mądrala (5,490 p.)
Edytowałem pytanie
komentarz 27 marca 2025 przez whiteman808 Mądrala (5,490 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 2025 przez WojAbuk Gaduła (3,380 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 625 wizyt
pytanie zadane 23 kwietnia 2017 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 332 wizyt
pytanie zadane 6 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,490 p.)
0 głosów
1 odpowiedź 669 wizyt
pytanie zadane 26 kwietnia 2018 w C# przez Stami Gaduła (3,790 p.)

93,659 zapytań

142,577 odpowiedzi

323,100 komentarzy

63,176 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
...