Interfaz

La gramática de Inline para C reconoce ciertas definiciones de funciones del código C. Esto es, Inline generará el código necesario para enlazar la llamada a la función como si fuera una subrutina Perl. Si no puede reconocer la definición, esta será ignorada sin que hayan mensajes de error o advertencia. No quedará disponible en el ámbito de Perl, pero podrá aún seguir siendo usada en el ámbito de C. Inline busca por definiciones de funciones de estilo:

tipo_de_retorno nombre_de_funcion ( pares_tipo_identificador ) { cuerpo }

en las parejas tipo identificador, ... puede usarse cualquier tipo que esté definido en el fichero typemap (véase sección 17.19).

Las siguientes definiciones no serán reconocidas:

Foo(int i) # no hay tipo de retorno
int foo(float f) { # no existe definición en typemap para float
int Foo(num) double num; { # la vieja sintáxis C no se soporta
void Foo(void) { # void se permite solo para el retorno

Un ejemplo sencillo:

$ cat interfases.pl
#!/usr/bin/perl -w

(@ARGV == 3) or die "Modo de uso:\n$0 num num string\n";
my ($n1, $n2, $n3) = @ARGV;
print "strlen($n3) + $n1 / $n2 = ",divide($n1, $n2, $n3),"\n";

use Inline C => <<'END_OF_CODE';

double divide(double n1, double n2, char * s) {
  return strlen(s)+n1/n2;
}
END_OF_CODE
Ejecución:
$ ./interfases.pl 9 2 "Hola"
strlen(Hola) + 9 / 2 = 8.5
$ ./interfases.pl 9 3 "Mundo"
strlen(Mundo) + 9 / 3 = 8
$ ./interfases.pl
Modo de uso:
./interfases.pl num num string

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19