2010-11-15 6 views
-2

Je voudrais pouvoir faire quelque chose comme ceci:Comment générer des erreurs de compilation?

void f(int*p = nullptr) 
    { 
    if (!p) 
{ 
//HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY 
} 
    } 
+12

Vous voulez un avertissement au moment de la compilation, en fonction de ce qui se passe à l'exécution? En général, ce n'est pas possible. Peut-être que vous voulez quelque chose de légèrement différent que nous pouvons réellement aider? Développez le problème que vous essayez de résoudre :) –

+5

Pourquoi la fonction fournirait-elle un argument par défaut 'nullptr'? C'est plutôt inutile, n'est-ce pas? :) – fredoverflow

+0

@FredOverflow - il ne s'agit pas si vous regardez cela du point de vue que, selon la politique, cette fonction est exécutée avec le pointeur passé ou avec nullptr;) –

Répondre

10

La bonne réponse est: Ce que vous essayez de faire ne fonctionnera jamais.

5

La plupart, if not all, compilateurs soutiennent les #error et #warning directives de préprocesseur.

Le compilateur de Microsoft, cependant, utilise #pragma message() au lieu de #warning.

+0

J'utilise Visual Studio et j'ai essayé d'utiliser le message #pragma mais pour des raisons de bizzare ne fonctionne pas pour moi. –

+2

@There' #pragma message ("blah") 'a travaillé pour moi pendant> 10 ans. Si cela ne fonctionne pas pour vous, vous faites quelque chose de mal. – sbi

3

Google #if#endif et #error directives de préprocesseur. Il ne sera pas possible de générer une erreur de compilation basée sur la valeur d'une variable qui n'est pas disponible au moment de la compilation, donc oubliez-le. Utilisez assert().

19

Pour générer un avertissement de temps de compilation basé sur un contrôle d'exécution, créez simplement un fichier appelé "warning.c" qui contient une déclaration de variable inutilisée. Vous pouvez ensuite générer des avertissements comme celui-ci:

void f(int *p = nullptr) { 
    if (!p) { 
     system("gcc -Wall warning.c"); 
    } 
} 
+0

C'est assez drôle, et répond à la question! – CiscoIPPhone

+0

'system (" cat int c;> /tmp/warning.c && gcc -Wall /tmp/warning.c && rm /tmp/warning.c ");' - pourrait aussi bien l'offrir :) – MSalters

Questions connexes