Differenze tra le versioni di "Conoscere la dimensione di un tipo di valore di linguaggio C ed ove è dichiarato"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per conoscere la quantità di memoria occupata da un tipo di valore, definito in linguaggio C, ed in quale file header di sistema esso è dichiarato, possiamo utilizzare il seguente codice:
+
#REDIRECT [[Conoscere la quantità di memoria occupata dai tipi di dati di C e la loro locazione nei file header]]
 
 
<FONT Color=gray>' ''long Dim_Tipo(void)''
 
' ''Restituisce la quantità di memoria occupata dal tipo di valore cercato.''</font>
 
Private Extern Dim_Tipo() As Long In "/tmp/libTipo"
 
 
 
'''Public''' Sub Main()
 
 
 
  Dim header As String[] = ["/usr/include/x86_64-linux-gnu/bits/types.h",    <FONT Color=gray>' ''i file header delle librerie ove ad esempio cercare''</font>
 
                            "/usr/include/x86_64-linux-gnu/sys/types.h",
 
                            "/usr/include/linux/types.h", "/usr/include/stdint.h",
 
                            "/usr/include/unistd.h"]
 
  Dim perc, s, tipo, ex As String
 
  Dim ss As String[]
 
  Dim sh As Short
 
  Dim d As Byte
 
   
 
<FONT Color=gray>' ''Cerchiamo un tipo valore:''</font>
 
  tipo = "<FONT Color=#B22222>u_int</font>"
 
     
 
  Print "Inizio ricerca:\n\n"
 
   
 
  For Each perc In header
 
    s = File.Load(perc)
 
    ss = Split(s, "\x0A")
 
    sh = ss.Find("* " & tipo & ";", gb.Like)
 
    If sh > -1 Then
 
      Print "  " & ss[sh]
 
      Print "\n      trovato nel file header: '\e[34m" & perc & "\e[0m' - riga: "; sh + 1
 
      Write "\n\nTermina ricerca ? ('s + Invio' per terminare, altrimenti solo 'Invio'): "
 
      Flush
 
      Input ex
 
      If ex = "s" Then Exit
 
    Endif
 
  Next
 
     
 
  d = CByte(DimensioneTipo(tipo))
 
  Print "\nIl tipo di dato '" & tipo & "' occupa [ "; d; " ] byte di memoria."
 
     
 
  Print "\n\e[31mFine ricerca"
 
 
 
'''End'''
 
 
 
'''Private''' Function DimensioneTipo(tp As String) As Long
 
 
 
  File.Save("/tmp/libTipo.c", "#include <bits/types.h>" &
 
            "\n#include <sys/types.h>" &
 
            "\n#include <linux/types.h>" &
 
            "\n#include <stdint.h>" &
 
            "\n#include <unistd.h>" &
 
            "\n\nlong Dim_Tipo() {" &
 
            "\n\n  return sizeof(" & tp & ");" &
 
            "\n}")
 
           
 
  Shell "gcc -o /tmp/libTipo.so /tmp/libTipo.c -shared -fPIC" Wait
 
 
 
  Return Dim_Tipo()
 
 
 
'''End'''
 

Versione attuale delle 11:50, 11 set 2022