N-PN White-Hat Project
[C TOTW 3] #warning, #error - Version imprimable

+- N-PN White-Hat Project (https://n-pn.fr/forum)
+-- Forum : Programmation (https://n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages compilés (https://n-pn.fr/forum/forumdisplay.php?fid=25)
+--- Sujet : [C TOTW 3] #warning, #error (/showthread.php?tid=3743)



[C TOTW 3] #warning, #error - ark - 08-09-2014

Hello !! :)

3 eme semaine, nouveau tip of the week ! C'est cool, j'apprends plein de trucs a vous en chercher !

Bref, trêves de bavardages, passons dans le vif du sujet! Il s'agit pour cette fois de deux directives de préprocesseur plutôt méconnues: #error et #warning

Alors, a quoi ca sert et comment ca s'utilise?

Simplement, ca sert a faire peter une erreur de compilation, ou un warning de votre propre invention.
Et au niveau de l'utilisation, voyons l'exemple ci-dessous :

Code C :

#include <stdio.h>

int main(void) {

#ifndef COMPILE_OK
#error "This won't compile!"
#else
  printf("Ce code marche nickel !\n");
#endif

#ifdef WARN
#warning "Hey, wait, this is a WARNING FOR YOU !"
#endif

  return 0;
}
 


On va maintenant essayer de compiler de manière très classique:
Code BASH :

$> gcc file.c
file.c: In function ‘main’:
file.c:6:2: error: #error "This won't compile!"
 #error "This won't compile!"
  ^
$>
 


On obtiendra donc cette erreur de compilation.
En revanche, si pour le coup on compile en spécifiant le flag qui va bien, tout se passe correctement.

Code BASH :

$>  gcc file.c -DCOMPILE_OK
$> ./a.out
Ce code marche nickel !
$>
 


Ensuite, on va pouvoir compiler avec le flag WARN pour voir le message de warning :
Code BASH :

$> gcc file.c -DWARN
file.c: In function ‘main’:
file.c:6:2: error: #error "This won't compile!"
 #error "This won't compile!"
  ^
file.c:12:2: warning: #warning "Hey, wait, this is a WARNING FOR YOU !" [-Wcpp]
 #warning "Hey, wait, this is a WARNING FOR YOU !"
  ^
$>
 


Voili voilou !
Je pense qu'un exemple d'utilisation peut etre dans le cas de dependances avec d'autre morceaux de code.


RE: [C] tip of the week 3 - ark - 10-09-2014

Du coup, j’étais entrain d’écrire un petit tool, et je me suis dis que ça pourrais être intéressant de réutiliser ce concept, donc voila un petit bout de code qui utilises le #warning d'une manière plus ou moins utile :) (même si ça reste basique)

Code C :

#ifndef __MAX_THREADS
# define __MAX_THREADS 8
# else
#  if __MAX_THREADS > 8
#   warning "make sure your CPU can efficiently handle that much threads"
#  endif
#endif