C n'est pas du tout un langage adapté ni pour être proche du matériel (voir le merdier du C dans les parties proche du matériel de linux) ni pour être efficace. D'ailleurs être efficace et être de bas niveau sont des objectifs incompatibles pour un langage de programmation primaire comme le C.
Il peut intégrer de l'assembleur et dispose d'un accès rapide aux zones mémoires, il est donc plus proche que la majorité des merdes^Wlangages "qui rosk"
Le C est très difficilement optimisable. Il n'a pas été conçu pour être optimisable. Et quand un compilateur décide de s'amuser à vraiment optimiser il casse énormèment de code, voir linux par exemple. La "sémantique" est un vrai merdier.
Exemple ?
Oui parce que goto est l'opération élèmentaire qui défini les "structures" de la soi-disant programmation structurée.
Exactement !
(pourquoi "soi-disant" ? tu peux développer ?)
Là on voit que tu n'y connais vraiment rien.
Une structure de donnée terminée par un symbole spécial doit être parcourue en entier juste pour déterminer sa taille.
Boarf, pas la peine d'être méchant hein ?
char* n'est pas une chaine, c'est un tableau de caractère. Si le dernier caractère est \0, alors ce tableau peut-être analysé comme un chaine par les fonctions standards de manipulation desdites chaines. Sinon, overflow en cas d'essai;
Si tu veux manipuler un tableau comme un chaine, de facto, le NULL final n'est pas efficace, tu devrais donc faire une structure pour ajouter le nombre de caractère de la chaine;
Absolument n'importe quoi, ça aucun rapport avec les interruptions. Quels interruptions en fait?
Oui, c'est n'importe quoi (parcque les IO font toujours appels à des syscall, quel que soit le langage utilisé, en userspace).
En revanche, cela a tout à voir avec les interruptions.
Rappel de "comment faire un syscall":
- remplir les registres avec les paramètres, valeur de retour, type etc du syscall
- utiliser l'assembleur "int"
C'est "coûteux" du fait d'un changement de contexte, mais pas scandaleux et surtout nécessaire;
Je sais pas de quel goto tu parles, mais en C le goto c'est à l'intérieur d'une fonction!
Ouais, ce n'est pas le même mot clé (longjmp ou un truc du genre pour les goto "globaux"), cela ne change en rien la nature de la chose;