Czy da się zatrzymać preprocessora wyłącznie na dołączeniu własnych bibliotek?

0

Robienie zadań z uva.onlinejudge.org. Akceptują tam tylko 1 plik .cpp. A ja, dla wygody, chciałbym zrobić sobie bibliotekę własnych struktur danych, których nie ma w STLu.

Co chcę zrobić: Ponieważ nie chce mi się robić ciągle copy-pasty, to chciałbym móc automatycznie dołączyć do pliku .cpp wszystkie własne nagłówki (swoje struktury danych będę robił definicje tylko w plikach nagłówkowych, inaczej to nie miałoby sensu), ale tylko własne nagłówki.

Czyli, jeśli mam na przykład plik zadanie.cpp:

#include <iostream>
#include "moja_funkcja.h"
using namespace std;

int main()
{
    int i;
    cin >> i;
    cout << moja_funkcja(i) << '\n';
}

oraz plik moja_funkcja.h:

#ifndef MOJA_FUNKCJA
#define MOJA_FUNKCJA

int moja_funkcja(int i)
{
    return 2*i;
}

#endif

To chciałbym móc jakoś automatycznie wygenerować z tego plik zadanie_do_oddania.cpp:

#include <iostream>
#ifndef MOJA_FUNKCJA
#define MOJA_FUNKCJA

int moja_funkcja(int i)
{
    return 2*i;
}

#endif
using namespace std;

int main()
{
    int i;
    cin >> i;
    cout << moja_funkcja(i) << '\n';
}

Jest coś takiego czy trzeba pisać własny skrypt na to? (własny skrypt nie byłby trudny, ale tylko przy założeniu, że wszysko trzymam w jednym folderze...)

0

Możesz użyć cxx -E by odpalić tylko preprocessor bez kompilacji. Problem w tym, że nie idzie tego zatrzymać na pewnej głębokości, więc plik wyjściowy będzie ogromny i "dość" nieczytelny. Przykładowo dla tego co ty napisałeś wyglądało by to tak https://gist.github.com/hauleth/71238a29af8ba9e2b866c563fad42d38

0

Kiedyś do HTML-a używałem PPWizard: http://dennisbareis.com/ppwexamp.htm

Możesz też napisać do tego własne narzędzie obsługujące tylko "#include" - nie powinno być skomplikowane (w dowolnym języku).

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