addPrototypes - Quel paramètre est obligatoire pour fournir le code des prototypes ?

Injection du Code Source C

Réponse

Le paramètre `routineCode` (alias: `code`) est obligatoire. Il attend une liste de chaînes de caractères contenant le code des définitions PROTO à ajouter.
SAS / CASL
proc cas;
   /* 1. Définition propre du code C dans une variable CASL 'monCodeC' */
   /* Note: J'ai corrigé la fonction mystring pour qu'elle soit valide */
   source monCodeC;
      #include <stdio.h>
      #include <string.h>
      #include <stdlib.h>

      /* Fonction arithmétique simple */
      int myadd(int a, int b) {
         return a + b;
      }

      /* Fonction de concaténation (corrigée pour l'exemple) */
      /* ATTENTION : En production, préférez passer le buffer de résultat en argument 
         plutôt que de faire un malloc pour éviter les fuites de mémoire. */
      void myconcat(char* result, char* str, int num) {
         sprintf(result, "%s_%d", str, num);
      }
   endsource;

   /* 2. Chargement de l'action set */
   loadactionset "fcmpact";

   /* 3. Appel de l'action avec le paramètre OBLIGATOIRE routineCode */
   fcmpact.addPrototypes /
      /* C'est ici que l'injection se fait via la variable */
      routineCode = { monCodeC } 
      
      /* Paramètres contextuels nécessaires */
      package     = "Pkg_Demo"
      saveTable   = TRUE
      funcTable   = {name="Table_Prototypes", replace=TRUE};

   print "Le code source a été transmis et compilé avec succès.";
run;
quit;
Cette réponse vous a-t-elle aidé ?
Bien que le paramètre accepte une liste de chaînes (routineCode={"int a...", "int b..."}), écrire du code C complexe directement dans les arguments de l'action est une mauvaise pratique (problèmes d'échappement des guillemets, illisibilité).

Best Practice : Utilisez un bloc source en CASL. Cela vous permet d'écrire votre code C nativement, avec son indentation et ses commentaires, dans une variable CASL, puis de passer simplement cette variable au paramètre routineCode. Cela sépare proprement la logique SAS (l'appel de l'action) de la logique C (l'algorithme).
addPrototypes

fcmpact

Doc : addPrototypes