134 votes

Quel est votre truc de programmation C préféré ?

Par exemple, je suis récemment tombé sur ça dans le noyau linux:

/* La Force d'une erreur de compilation si la condition est vraie */
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))

Donc, dans votre code, si vous avez une certaine structure, qui doit être, dire un multiple de 8 octets la taille, peut-être à cause de certaines contraintes matérielles, vous pouvez le faire:

BUILD_BUG_ON((sizeof(struct mystruct) % 8) != 0);

et il ne compile pas, sauf si la taille de la structure mystruct est un multiple de 8, et si c'est un multiple de 8, pas de runtime code est généré à tous.

Un autre truc que je sais c'est tiré du livre "les Graphiques pierres précieuses" qui permet à un seul fichier d'en-tête à la fois déclarer et initialiser des variables dans un seul module, tandis que dans d'autres modules à l'aide de ce module, simplement de les déclarer comme externes.

#ifdef DEFINE_MYHEADER_GLOBALS
#define MONDIALE
#define INIT(x, y) (x) = (y)
#else
#define MONDIALE extern
#define INIT(x, y)
#endif

MONDIAL int INIT(x, 0);
MONDIAL int somefunc(int a, int b);

Avec cela, le code qui définit x et somefunc n':

#define DEFINE_MYHEADER_GLOBALS
#include "the_above_header_file.h"

alors que le code c'est simplement à l'aide de x et somefunc ():

#include "the_above_header_file.h"

Ainsi, vous obtenez un fichier d'en-tête qui déclare les deux instances de variables globales et les prototypes de fonction où elles sont nécessaires, et le correspondant externe déclarations.

Alors, quels sont vos favoris de programmation C tours le long de ces lignes?

80voto

Evan Teran Points 42370

C99 vous propose des trucs vraiment cool à l’aide de tableaux anonymes :

Suppression de variables inutiles

devient

Passez une quantité Variable d’Arguments

Listes chaînées statiques

Tout que je suis sûr que plusieurs autres frais techniques que je n’ai pas pensé.

67voto

fortran Points 26495

En lisant le code source de Quake 2, je suis venu avec quelque chose comme ceci :

(plus ou moins, je n’ai pas le code de pratique pour vérifier maintenant).

Depuis lors, un nouveau monde d’utilisation créative du préprocesseur ouvert devant mes yeux. Je ne plus viser les en-têtes seulement, mais toute morceaux de code en temps (il améliore beaucoup la réutilisabilité) :-p

Merci John Carmack ! xD

50voto

therefromhere Points 21329

Je suis friand d’utiliser `` pour initialiser les structures sans avoir besoin d’appeler memset.

Cela va initialiser tous les membres du struct (ou tableau) à zéro (mais pas n’importe quel octets de remplissage - utilisation de memset si vous avez besoin à zéro ceux aussi bien).

Mais il faut savoir il y a quelques problèmes avec cela pour grands, allouées de manière dynamique des structures.

45voto

Jackson Points 3828

Si nous parlons astuces c mon préféré doit être périphérique de Duff pour dérouler boucle ! Je suis en attente pour la bonne occasion de venir le long pour moi de l’utiliser effectivement en colère...

42voto

Pierre Points 15256

à l’aide de et pour le débogage

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X