2009-10-25 5 views
0

J'essaie d'exécuter le précompilateur GCC sur le code Java en émettant la commande suivante: "gcc -D YES -E -x c -o YesNo.java _YesNo.java". Le précompilateur gcc ajoute cependant des informations supplémentaires au début du fichier, comme vous pouvez le voir ci-dessous. Comment puis-je demander au précompilateur de ne pas créer de telles sorties pour pouvoir compiler directement la sortie du précompilateur sans apporter de modifications? Merci d'avance!Exécution du précompilateur GCC sur le code Java

entrée Java GCC:

public class YesNo 
{ 
    public static void main(String[] args) 
    { 
     #ifdef YES 
      System.out.println("YES"); 
     #else 
      System.out.println("NO"); 
     #endif 
    } 
} 

sortie GCC precompiler:

# 1 "Slask.pjava" 
# 1 "<built-in>" 
# 1 "<command line>" 
# 1 "Slask.pjava" 

public class YesNo 
{ 
    public static void main(String[] args) 
    { 

      System.out.println("YES"); 



    } 
} 

Répondre

4

Vous devez juste le -P arg. Vous pouvez également exécuter la commande cpp plutôt que gcc.

Enfin, notez la mise en garde suivante FSF de man cpp:

Le préprocesseur C est destiné à être utilisé uniquement avec C, C++, et le code source Objective-C . Dans le passé, il a été utilisé comme un processeur de texte général. Il va s'étouffer sur l'entrée qui ne respecte pas les règles lexicales de C . Par exemple, les apostrophes seront interprétées comme début des constantes de caractères, et provoqueront des erreurs. En outre, vous ne pouvez pas compter sur elle en préservant les caractéristiques de l'entrée qui ne sont pas significatifs à langues de la famille C. Si un Makefile est prétraité, tous les onglets durs seront supprimés, et le Makefile ne fonctionnera pas .

Cela dit, vous pouvez souvent obtenir loin avec l'aide cpp sur des choses qui ne sont pas C. Autres Algol-ish langages de programmation sont souvent en toute sécurité (Pascal, Ada, etc.) est donc l'assemblage, avec mise en garde. -traditional-cpp mode préserve plus d'espace blanc et est sinon plus permissif. Beaucoup de problèmes peuvent être évités en écrivant C ou des commentaires de style C++ au lieu de commentaires de langue maternelle, et en gardant des macros simples.

la mesure du possible, vous devez utiliser un préprocesseur adapté à la langue vous écrivez dans. Les versions modernes de l'assembleur GNU ont macro installations. La plupart des langages de programmation de haut niveau ont leur propre compilation conditionnelle et le mécanisme d'inclusion . Si tout le reste échoue, essayez un vrai processeur de texte général , tel que GNU M4.

Notez la référence à m4(1). Je suspecte cpp fonctionnera bien sur Java, mais si elle n'utilise pas simplement m4.

0

Ajoutez -Wp,-P à votre invocation gcc.-Wp, passe un argument au préprocesseur cpp et -P empêche la génération de marqueurs de ligne lorsqu'il est passé à cpp.

1

Le prétraitement rendra (à mon avis) le code cassant.

Considérons à la place aspectj ou annotations.

Questions connexes