Jump to content

[end] Mettre du SQL "embedded in C" dans une macro


Recommended Posts

Bonjour à tous !

Ma question est la suivante, est-il possible d'écrire un code de ce genre là en Pro*C :

#include <stdio.h>
#include <stdlib.h>

#define plop(x) EXEC SQL DECLARE Curs_ ## x CURSOR FOR\
			   SELECT tutu\
			   FROM tata\
			   WHERE titi = "tete"\
			   ORDER BY tutu;

int main(void)
{
 printf("Coucou\n");

 plop(toto);

 return 0;
}

Le problème, bien évidemment, c'est que le précompilateur Pro*C passe avant le précompilateur C, et les macro n'ont donc pas encore été traitées à ce moment là. Du coup le précompilateur Pro*C gueule en se demandant ce que vient faire ce EXEC SQL à cet endroit insolite.

J'ai essayé la solution la plus naturelle, à savoir passer un coup de "gcc -E" sur le fichier .pc (en précisant alors à gcc que cette extension doit être gérée comme du C), mais le précompilateur C génère plein de code que n'est pas en mesure de traiter par derrière le précompilateur Pro*C.

Connaissez vous un moyen de précompiler un fichier C en ne traitant que les macros sans tenir compte du reste ? Ou alors une autre idée pour réussir à integrer du code "embedded SQL" dans une macro C ? Je commence à douter que cela soit possible, et je trouve ça vraiment dommage de se priver de ce genre de possibilité :transpi:.

Merci d'avance pour vos idées ;) !

Link to comment
Share on other sites

J'avais oublié de préciser que la base est déjà existante (c'est une base Oracle), et il n'est pas possible de changer l'architecture. Ce qu'il me faudrait donc, l'idéal, ce serait un mini précompilateur qui remplace uniquement les macros dans le fichier .pc. Je n'ai jamais entendu parler d'un tel précompilateur et mes recherches ne donnent rien, mais on sait jamais, quelqu'un parmis vous a peut-être entendu parler d'un truc du genre...

Link to comment
Share on other sites

Merci beaucoup uzak, effectivement il est toujours possible de passer par une fonction, et de mettre cette dernière en "inline" si on ne veut pas de perte de performance due à l'ajout d'un appel de fonction. C'est d'ailleurs ce que je vais faire je pense.

Mais j'aurai préféré utiliser une macro si c'était possible, malheureusement apparement non :cartonrouge:...

Link to comment
Share on other sites

  • 3 weeks later...

De toutes facon, ta macro ou ta fonction inline donneront le même résultat une fois compilées.

Il y'a même un avantage a la fonction inline : Si tu optimise ton executable pour la taille et non pas pour la vitesse, le compilateur ne recopiera plus ta fontion inline et la gèrera comme une fonction normale.

Les paramètres des fonctions étant passés par les registres dans la limite du possible, pas de perte significative, sauf a appeller des millions de fois une procédure d'une ligne...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...