1
votes

Équivalent Python `exec` possible en C ++

J'ai trouvé un besoin d'exécuter du code C ++ dans le terminal. Lorsque vous réfléchissez à la manière de procéder, la commande exec de Python est parfaite. Malheureusement, je ne peux pas l'utiliser car j'ai besoin d'un parallèle C ++.

Existe-t-il une commande similaire en C ++?


9 commentaires

Non. C ++ est généralement compilé et non interprété.


Serait-il possible d'avoir le code compilé sur la base d'une commande? Comme envoyer g ++ nom de fichier et obliger une touche enter ?


Vous pouvez certainement demander à votre programme python de générer du code C ++, de l'écrire dans un fichier, puis d'appeler g ++ pour le compiler, puis en supposant que tout se passe bien, exécutez-le. Mais cela ressemble à un problème XY . Quel est le vrai problème que vous essayez de résoudre. Non, pas celui sur l'exécution dynamique du code C ++, mais le problème auquel la solution que vous pensez est d'exécuter le code C ++ dynamiquement.


Venant d'un arrière-plan de programmation C, on bifurquerait le processus, et execvp en son sein. Quelque chose comme codereview.stackexchange.com/a/177377 pourrait fonctionner pour lancer un exécutable. Si c'est ce que vous demandez?


std :: system () peut soyez proche de ce dont vous avez besoin, mais n'est pas toujours recommandé .


Demandez-vous un environnement C ++ interactif dans lequel vous pouvez taper du code et voir le résultat immédiatement sans compilation, juste pour une utilisation de débogage ou d'expérimentation, comme ipython ou irb?


@Cygnus Je ne comprends pas comment la réponse acceptée pourrait éventuellement répondre à votre question. Il n'y a aucun moyen d'exécuter du code dynamiquement en utilisant le système de C ++ ou l'une des fonctions non standard de la famille exec * . Ceux-ci sont utilisés pour exécuter des commandes externes. exec de Python ne l'est pas. Il injecte du code dans un programme en cours d'exécution.


@TedLyngmo Comme @Chipster l'a déclaré dans sa réponse - il n'y a pas d'équivalent parfait. La réponse donnée était la plus proche de exec en Python.


@Cygnus C'est juste qu'aucune de ces suggestions ne peut être utilisée pour faire quoi que ce soit à distance proche de ce que fait exec en python et quiconque recherche un équivalent Python exec en C ++ va perdre du temps à essayer de comprendre comment utiliser la réponse. Au moins, mettez un exemple de code Python exec dans la question pour qu'il devienne clair dans quelles situations la réponse peut aider pour les futurs lecteurs, car je ne peux penser à aucune.


3 Réponses :


3
votes

Il n'y a pas d'équivalent parfait de exec () en C ++ que je sache, car C ++ n'est pas conçu pour être utilisé normalement de cette façon.

system () vient à l'esprit comme un équivalent proche du haut de ma tête, bien que je vous prévienne que system () n'est généralement pas recommandé pour une utilisation dans le code de production a>.

Cependant, si aucune des raisons de la question liée ne vous dérange, vous pouvez théoriquement construire un exec () à partir d'une combinaison de system () et exit () :

void exec(const char* command, int code=0) {
    system(command);
    exit(code);
}

Edit: Je suis peut-être loin. Il peut y avoir un exécutable en C ++ . Consultez également cette question .


0 commentaires

2
votes

La réponse courte est non, c ++ ne prend pas en charge l'évaluation et l'exécution de code arbitraire.

Si vous avez besoin de l'aide aux scripts, utilisez un langage de script. Lua et python sont raisonnablement faciles à intégrer. chaiscript ressemble même beaucoup à du code C ++.

Vous pouvez appeler un compilateur à partir de votre programme, puis exécuter l'exécutable résultant, mais je doute que ce soit une bonne solution quel que soit votre problème.


0 commentaires

1
votes

https://docs.python.org/3/library/functions .html # exec

exec (objet [ globals [ locaux]])
Cette fonction prend en charge l'exécution dynamique du code Python.

Il n'y a pas de fonction équivalente ou similaire en C ++.


0 commentaires