Archives pour la catégorie C

Aggressive commit of Intellisense suggestions in Visual Studio

Just to add a bit of context here: at the moment, I’m doing quite a lot of C++ programming on Windows environments, especially with Visual Studio.

And one thing I particularly dislike with Visual Studio’s default settings is that « aggressive commit » of Intellisense suggestions when you’re typing a type is disabled by default.

So, what is « aggressive commit of Intellisense suggestions », you ask…

Lire la suite

Les fichiers temporaires, ces red shirts de la programmation

enlist-red-shirt2Dans la série télévisée Star Trek, les agents de sécurité sont reconnaissables à leur gilet rouges, c’est pour cela qu’on les appelle couramment les red shirts. Le souci avec ces personnages, c’est qu’ils ont une fâcheuse tendance à mourir dès leurs premières minutes à l’écran (pour une raison différente à chaque épisode), ainsi, les personnages principaux (récurrents) se rendent compte du danger imminent sans subir eux-mêmes de dommages (pratique, scénaristiquement, non ?). Il s’agit souvent de leur unique rôle dans l’épisode, et on ne connaît parfois même pas leur nom.

De manière assez inattendue, on peut trouver des similitudes entre un redshirt de Star Trek et un fichier temporaire en programmation : on en a besoin dans un contexte particulier, son nom ne nous intéresse parfois même pas, et il se doit d’être détruit à la fin, lorsqu’on en a plus besoin.

Cette fois, je vas parler des fichiers temporaires, d’une astuce et de quelques fonctions pour les gérer facilement en C. Notez bien: on est en environnement Linux. Il n’est pas garanti que ça marche (voire même c’est sûr, certaines choses ne marcheront pas) sur Windows ou ailleurs.

Lire la suite

Des tableaux et des indexes (ou l’inverse …)

J’ai appris un fun fact avec le C en parcourant Stack Overflow aujourd’hui 🙂

En général pour parcourir un tableau, par exemple un tableau de caractères:

char *toto

un index commençant à 0 en C, on fait généralement toto[0] pour accéder au premier élément, toto[1] pour accéder au second, etc…

Et que se passe-t-il lorsqu’on essaye d’écrire par exemple 5[toto] ?

Et bien ça fait exactement la même chose que lorsqu’on écrit toto[5] (on accède à la sixième case du tableau), pour une raison simple : pour le compilateur, l’opération « a[b] » pourrait se traduire par  » déréférence l’adresse a (un tableau n’est jamais qu’une suite d’octets réservée en mémoire, l’adresse du tableau étant de fait l’adresse de la première case), puis avance de b cases ». Autrement dit :

*(a + b)

(en C on déréférence avec l’opérateur *)

Et, attention mathématiques niveau CP 🙂 L’addition étant commutative, l’expression « a+b » égale « b+a ».

Ainsi, d’une manière un peu surprenante mais pourtant totalement logique, la syntaxe 5[toto] fonctionne parfaitement !

Le C ne cessera jamais de m’étonner … 🙂

La mini lib réseau

 

Plusieurs fois (pour des projets Epitech notamment), j’ai eu à faire ce qu’on appelle des sockets Unix en C

Des chaussettes unies haussées ?

Autrement dit, des programmes sur le modèle client/serveur qui se connectent via le protocole TCP/IP dans un environnement Unix (comme par exemple Linux), codés en C.

(Si vous n’avez pas compris ces premières lignes, inutile, j’en ai peur, d’en lire davantage… 😉

Lire la suite