Zum Beispiel würde Ich mag so etwas tun:Wie konvertiert man GMP C Parameterkonventionen in etwas natürlicheres?
#include <gmp.h>
typedef mpz_t Integer;
//
Integer F(Integer a,Integer b,Integer c,Integer d) {
Integer ret = times(plus(a,b),plus(c,d));
}
Aber GMP mir das nicht tun lassen, offenbar mpz_t ein Array ist, so dass ich den Fehler:
error: ‘F’ declared as function returning an array
anstatt also hätte ich so etwas wie dies zu tun:
void F(Integer ret,Integer a,Integer b,Integer c,Integer d) {
Integer tmp1,tmp2;
plus(tmp1,a,b);
plus(tmp2,c,d);
times(ret,tmp1,tmp2);
}
das ist unnatürlich, und nicht nach der logischen Art und Weise, dass C (oder im allgemeinen mathematischen) Ausdrücken zusammengesetzt werden kann. In der Tat können Sie nichts auf eine mathematische Art und Weise zusammensetzen, da Sie GMP-Nummern anscheinend nicht zurückgeben können! Wenn ich zum Beispiel einen einfachen Yacc/Bison-Stil-Parser schreiben möchte, der eine einfache Syntax mit +, -, /, * usw. in C-Code umwandelt, der die gegebenen Ausdrücke mit GMP implementiert, scheint es viel schwieriger als ich müsste alle Zwischenwerte verfolgen.
Also, wie kann ich GMP zwingen, hier meinen Willen zu beugen und eine vernünftigere Syntax zu akzeptieren? Kann ich mpz_t sicher "schummeln" und in ein void * werfen und dann am anderen Ende wieder in mpz_t wiederherstellen? Ich gehe davon aus, die Dokumentation zu lesen, dass es nicht wirklich ist um ein Array herum, sondern nur eine Referenz, also warum kann es nicht auch eine Referenz zurückgeben? Gibt es eine gute Grundlage für die Soundprogrammierung, so dass ich mein eigenes Programm schreiben sollte?
'typedef Integer mpz_t;' Haben Sie das kompiliert? –
Whoops, nein, ich habe nicht kopiert/eingefügt von meiner Quelle Ich habe nur manuell neu getippt und anscheinend diese beiden herum getauscht. Ich habe diesen Fehler korrigiert, danke! – Michael