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

Da Gambas-it.org - Wikipedia.
(Creata pagina con "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 se...")
 
Riga 18: Riga 18:
 
      
 
      
 
  <FONT Color=gray>' ''Cerchiamo un tipo valore:''</font>
 
  <FONT Color=gray>' ''Cerchiamo un tipo valore:''</font>
   tipo = "u_int"
+
   tipo = "<FONT Color=#B22222>u_int</font>"
 
        
 
        
 
   Print "Inizio ricerca:\n\n"
 
   Print "Inizio ricerca:\n\n"
Riga 28: Riga 28:
 
     If sh > -1 Then
 
     If sh > -1 Then
 
       Print "  " & ss[sh]
 
       Print "  " & ss[sh]
       Print "\n      trovato nel file header: '" & perc & "' - riga:";; sh + 1
+
       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')\r"
+
       Write "\n\nTermina ricerca ? ('s + Invio' per terminare, altrimenti solo 'Invio'): "
 +
      Flush
 
       Input ex
 
       Input ex
 
       If ex = "s" Then Exit
 
       If ex = "s" Then Exit
      Write Space(80) & "\r"
 
 
     Endif
 
     Endif
 
   Next
 
   Next
 
        
 
        
  Write "Fine ricerca" & Space(50)
 
 
   d = CByte(DimensioneTipo(tipo))
 
   d = CByte(DimensioneTipo(tipo))
   Print "Il tipo di dato '" & tipo & "' occupa [ "; d; " ] byte di memoria."
+
   Print "\nIl tipo di dato '" & tipo & "' occupa [ "; d; " ] byte di memoria."
 +
     
 +
  Print "\n\e[31mFine ricerca"
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 17:18, 2 apr 2021

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:

' long Dim_Tipo(void)
' Restituisce la quantità di memoria occupata dal tipo di valore cercato.
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",     ' i file header delle librerie ove ad esempio cercare
                           "/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
   
' Cerchiamo un tipo valore:
 tipo = "u_int"
     
 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