Makro wykonywane przed kompilacją

0

Mój problem wygląda następująco:

Chciałbym w swoim programie umieścić wynik pewnej jego funkcji. Coś na podobieństwo:

char* zmienna=funkcja("dane");

W tym przypadku w sekcji danych będzie widniał ciąg znaków "dane", a ja chcę aby był w nich wynik podanej funkcji. Umieszczanie tego ręcznie jest trochę kłopotliwe dlatego zastanawiam się czy c/c++ nie mają jakiejś makropodobnej funkcjonalności?

0

nie ma. nie dla lancuchow znakow. dla liczb - od biedy mozna by sie pomeczyc templateami i liczyc ze kompilator da rade (i bedzie mial ochote) podczas kompilacji to wyliczyc. a w Twoim przypadku - musisz wykorzystac inne narzedzie aby wzielo ten plik .cpp, przetworzylo ten tekst, wkleilo na miejsce i dopiero potem odpalilo kompilator.

0

Możesz ładować łańcuch z zasobów i odpalać skrypt przed kompilacją który zmienia tekstowy plik zasobów .rc, albo umieścić w tym pliku jakieś makro jeśli wystarczy. Może być #include w pliku zasobów do innego pliku z łańcuchem, to będzie łatwiej edytować.

0

Cóż, C++ to nie Lisp niestety. Makra Lispa to potęga, wywołanie w kodzie nie różni się od wywołania funkcji, jest tylko jedna różnica - makro jest wywoływane podczas kompilacji i zwraca kod do skompilowania. Co to daje? Cóż, pomijając fakt prostego skrócenia kodu można też dowolne wyrażenia obliczać i generować kod... dlatego właśnie Lispa nazywa się programowalnym językiem programowania. Hm, a jaki jest język makr? To po prostu Lisp, w tym samym języku pisze się kod i makra :>
Dobra, dosyć wzdychania do tego potwora. Cóż, może to nie jest najlepsze rozwiązanie ale... użyłbym assemblera - w końcu asmy posiadają makra pozwalające wykonywać obliczenia podczas kompilacji.
W pliku .h extern, jako oddzielny plik asm właściwe generowanie danych, plik asm jako część projektu i voila - podczas kompilacji generowany jest właściwy ciąg i umieszczany w sekcji danych, przez linker. Jedyny minus jest taki, że mimo wszystko nie można z poziomu C++ przekazywać danych do makra.

0

Dzięki za odpowiedzi. Pokombinuję jak tylko będę miał czas :)

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