Printf ()
La funzione della libreria di C
int printf(const char *format, ...)
scrive su stdout gli argomenti stringa passati.
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta.
Vanno considerati almeno due casi: uso della funzione printf() con le stringhe di caratteri, ed uso con valori numerici.
Uso di printf() con le stringhe di caratteri
Nel caso si debba utilizzare la funzione printf() con le stringhe di caratteri, ai fini della sua dichiarazione con Extern in Gambas vanno inoltre considerati due sottocasi:
1) senza uso del parametro di formattazione. In questo caso l'argomento all'interno della funzione ovviamente sarà la sola stringa di caratteri da scrivere in console. Il valore ritornato va dichiarato come tipo Puntatore e non di tipo stringa, altrimenti sarà sollevato un errore "Segmentation fault (11)".
La dichiarazione, dunque, sarà:
Private Extern printf(testo As String) As Pointer
Un esempio pratico:
Private Extern printf(testo As String) As Pointer Public Sub Main() Dim testo As String testo = "Testo qualsiasi" printf(testo) printf("\nTesto qualsiasi") End
2) uso del parametro di formattazione. In questo altro caso la funzione fprint() avrà almeno due argomenti, entrambi di tipo stringa, il primo rappresentato dalla stringa di formattazione, ed il secondo dalla variabile contenente la stringa di caratteri da mostrare in console. Anche in questo caso il valore ritornato va dichiarato come tipo Puntatore e non di tipo stringa, altrimenti sarà sollevato un errore "Segmentation fault (11)".
La dichiarazione, dunque, sarà:
Private Extern printf(formatt$ as string, var$ As String) As Pointer
Un esempio pratico:
Private Extern printf(formatt$ As String, var$ As String) As Pointer In "libc:6" Public Sub Main() Dim testo As String testo = "Testo qualsiasi" ' Con variabile di tipo stringa contenente il testo: printf("%s\n", testo) ' Con testo direttamente espresso: printf("%s\n", "Testo qualsiasi") End
Uso di printf() con valori numerici
Nel caso si debba utilizzare la funzione printf() con le stringhe di caratteri, ai fini della sua dichiarazione con Extern in Gambas il valore di ritorno va dichiarato con il tipo di variabile numerica che si intende ritornare (Byte, Short, Integer, etc.). La funzione, inoltre, avrà due argomenti: uno relativo alla stringa di formattazione, l'altro relativo al valore numerico o alla variabile.
Per la scrittura del risultato in console (o Terminale) è sufficiente la sola funzione printf().
La dichiarazione dunque, se ad esempio si vuol ritornare un valore di tipo Integer, sarà:
Private Extern printf(formatt$ As String, numero As Integer) As Integer
Esempio pratico:
Public Sub Main() printf("%d\n", 4444 + 5555) End
Se si vuole utilizzare la formattazione esadecimale:
Public Sub Main() Dim i, n As Integer n = 11 printf("%02X\n", n) End
Dovendo usare un Float:
Private Extern printf(formatt$ As String, fl As Float) As Float In "libc:6" Public Sub Main() printf("%lf\n", 11 / 2) End