CND jest Python tłumacz źródła do źródła, które sprawia, że korzystanie tablice n-wymiarowej w C przyjemniejsze & nbsp; Okaże ten kod.:
nieważne sgemm (float *, pływak * b, pływak * c, int n)
{
& Nbsp; Wymiar "fortran" [n, n];
& Nbsp; Wymiar "fortran" b [n, n];
& Nbsp; Wymiar c [n, n];
& Nbsp; for (int i = 1; i <= n; ++ i)
& Nbsp; for (int i = 1; j <= n; ++ j)
& Nbsp; {
& Nbsp; pływak tmp = 0;
& Nbsp; for (int k = 1; k <= n; ++ k)
& Nbsp; tmp + = [i, k] * b [k, j];
& Nbsp; c [i-1, j-1] = tmp;
& Nbsp;}
}
w tym:
nieważne sgemm (float *, pływak * b, pływak * c, int n)
{
& Nbsp; for (int i = 1; i <= n; ++ i)
& Nbsp; for (int i = 1; j <= n; ++ j)
& Nbsp; {
& Nbsp; pływak tmp = 0;
& Nbsp; for (int k = 1; k <= n; ++ k)
& Nbsp; tmp + = [((k - 1) * ((n - 1) + 1)) + (i - 1)] * b [((j - 1) * ((n - 1) + 1) ) + (K - 1)];
& Nbsp; c [((i - 1) * n) + (j - 1)] = tmp;
& Nbsp;}
}
Można również zapoznać się z bardziej kompleksowej przykład, który pokazuje kilka dodatkowych dzwonki i gwizdki.
Jedynym efektem deklaracji wymiaru jest zmiana interpretacji array (IDX) operatora dolnym. Deklaracje wymiar posłuszeństwa regularne zasady dotyczące zakresu C.
Chciałbym również zauważyć, że CND jest solidnym, tłumacz oparte parser, nie łuszcząca się narzędziem tekst zastępczy. Rozumie wszystko C99, plus wiele GNU rozszerzeń.
Każda specyfikacja osi w deklaracji wymiar ma następującą postać:
start: end: krok: leading_dimension
wsadu może zostać pominięty. koniec i krok również można pominąć, ale jeśli wpisy po nich zostaną określone, ich dwukropki końcowe musi pozostać na miejscu. Na przykład, określenie osi: 5 po prostu określa krok z 5. krok po prostu działa jako mnożnik na indeksie. Nie kontrola prawdopodobieństwa ogóle odbywa się na deklaracji wymiaru. Możesz strzelać sobie w stopę, jak tylko chcesz.
Jeżeli układ jest podawana jako "c" lub w ogóle nie dany, następujące rzeczy są prawdziwe:
- Tablica jest określone w wierszu-dur kolejności.
- Indeks końcowy przyjmuje się wykluczają, jeżeli został on określony.
- Domyślne indeksu początku do 0.
Jeżeli układ jest podawana jako "fortran", następujące rzeczy są prawdziwe:
- Tablica jest określone, aby kolumny-dur.
- Indeks końcowy przyjmuje się włącznie, jeżeli został on określony.
- Domyślne indeksu początku do 1.
(Most) z wiedzy zawartej w deklaracji wymiar może być reobtained programowo przez funkcje follwing:
- Rankof ()
- Nitemsof ()
- Lboundof (oś)
- Uboundof (oś) (zwraca określony przez użytkownika górne ograniczenie)
- Puboundof (oś) (zwraca indeks tuż za końcem osi)
- Ldimof (oś)
- Strideof (oś)
W każdym przypadku, oś musi być stała liczba całkowita (nie stałym wyrażeniem, zwykła liczba całkowita).
Instalacja / Zastosowanie
Możesz otrzymać CND pobierając paczkę z indeksu pakietu lub z github:
& Nbsp; git clone git: //github.com/inducer/cnd.git
& Nbsp; cd CND
git modułem startowych
& Nbsp; git aktualizacja modułem
Aby korzystać CND, wystarczy dodać dystrybucji-dir / bin do zmiennej PATH.
Aby rozpocząć, wystarczy uruchomić (z poziomu roota CND):
& nbsp; przykłady cd
& Nbsp; ../ bin / cndcc gcc -std = c99 basic.c
& Nbsp; ./ a.out
Jeśli chcesz bardziej precyzyjną kontrolę nad procesem tłumaczenia, polecenie CND naraża tylko tłumaczenie źródło-źródło. Należy pamiętać, że CND oczekuje preprocesowany źródła. Możesz przejść -E opcja ma CND uruchomić preprocesora na źródło dla Ciebie. Uruchom:
& Nbsp; CND -h
aby uzyskać pełną pomoc w interfejs wiersza poleceń. Możesz ustawić zmienną środowiskową CND_CPP do preprocesora, którego chcesz użyć.
Co nowego w tym wydaniu:
- Składnia zmiana z [i, j] do [i, j] .
- Jeszcze wsparcie parser dla nagłówków życiowych.
Wymagania :
- Python
Komentarze nie znaleziono