2010-03-08 5 views
0

Depuis LLVM/cLang est particulièrement bien conçu.Prise en charge de macro supplémentaire dans clang?

Cela semble être une excellente opportunité pour augmenter le système de préprocesseur/préprocesseur C/C++.

Est-ce que quelqu'un sait de

  1. capacités macro/préprocesseur supplémentaires ajoutés par Clang ou
  2. projets parallèles pour rendre le système macro plus puissant (comme turing complète)

Note: Je suis poser des questions sur les macros. Modèles non C++ Je veux que ce thread soit spécifique à la macro/au préprocesseur.

Répondre

1

LLVM/clang est particulièrement bien conçu. Le préprocesseur clang est particulièrement agréable: il garde la trace des expansions de macro, etc. Je soupçonne que la raison pour laquelle il n'a pas été étendu est la suivante: 1. Un préprocesseur étendu n'est pas standard, et 2. Personne ne l'a fait. N'hésitez pas à l'étendre. Comme on dit sur le LLVM IRC: "Les correctifs sont les bienvenus", bien que je soupçonne que des extensions de préprocesseur très non standards ne le soient pas.

Pour un exemple de préprocesseur pris à l'extrême, jetez un œil à PL/1. ;-)

0

Pourquoi n'utilisez-vous pas simplement M4 en tant que pré-préprocesseur?

+0

Cela semble intéressant, mais googler autour je ne peux pas trouver comment dire à clang d'utiliser m4 comme un préprocesseur comment puis-je faire cela? En particulier, supposons que j'ai un .hpp qui inclut un fichier .hpp anotehr; comment puis-je dire à m4 de pré-traiter le fichier inclus aussi? – anon

+1

Ce que vous auriez à faire est d'utiliser un script sur M4: pré-traiter tous les fichiers (y compris les en-têtes) avant de les envoyer au compilateur C++. Les bonnes nouvelles sont que vous n'avez pas inventé un système de macro puissant, comme M4 est déjà capable de Turing. Si vous insistez pour que les macros soient définies * dans les fichiers .hpp, vous pouvez définir les macros M4 dans les commentaires C++, effectuer une pré-analyse du code pour extraire et collecter les macros M4, puis exécuter l'application M4. –