Arrière-plan:
Dans les versions de Mac OS jusqu'à la version 9, la représentation standard pour les fichiers texte utilisés ASCII CR (retour chariot) de caractères, la valeur décimale 13, pour marquer la fin d'une ligne.
Mac OS 10, à la différence des versions précédentes, est de type UNIX, et utilise le code ASCII du caractère LF (saut de ligne) de caractères, la valeur décimale 10, pour marquer la fin d'une ligne.
La question est de savoir, quelles sont les valeurs des constantes de caractères '\n'
et '\r'
dans les compilateurs C et C++ pour Mac OS versions antérieures d'OS X?
Il y a (au moins) deux approches possibles qui pourraient avoir été prises:
- Traiter
'\n'
que l'ASCII LF personnage, et de le convertir et de CR de la sortie et d'entrée de texte ruisseaux (similaire à la conversion entre LF et CR-LF sur les systèmes Windows); ou - Traiter
'\n'
que l'ASCII CR caractère, qui ne nécessite pas de conversion en entrée ou en sortie.
Il y aurait des problèmes potentiels avec la deuxième approche. L'une est que le code qui suppose '\n'
LF risque d'échouer. (Ce code est intrinsèquement non-portable, de toute façon.) L'autre est qu'il y a encore besoin d'être une valeur distincte pour '\r'
, et sur une base ASCII système CR est la seule raisonnable de la valeur. Et le C standard ne permet pas de se '\n' == '\r'
(grâce à mafso pour trouver la citation, 5.2.2 paragraphe 3), de sorte que certains autres de la valeur devra être utilisé pour l' '\r'
.
Qu'est-ce que la sortie de ce programme C lorsqu'il est compilé et exécuté sous Mac OS N, pour N inférieur à 10?
#include <stdio.h>
int main(void) {
printf("'\\n' = %d\n", '\n');
printf("'\\r' = %d\n", '\r');
if ('\n' == '\r') {
printf("Hmm, this could be a problem\n");
}
}
La question s'applique à la fois le C et le C++. Je suppose que la réponse serait la même pour les deux.
La réponse pourrait également varier d'un compilateur C pour un autre, mais j'espère que les responsables de l'implémentation du compilateur aurait maintenu la cohérence les uns avec les autres.
Pour être clair, je ne demande pas quelle représentation les anciennes versions de Mac OS utilisé pour représenter de fin de ligne dans les fichiers texte. Ma question est spécifiquement et uniquement sur les valeurs des constantes '\n'
et '\r'
en C ou C++ code source. Je suis conscient que l'imprimerie '\n'
(quelle que soit sa valeur) à un flux de texte provoque la conversion du système de fin de ligne de la représentation (dans ce cas, ASCII CR); ce comportement est requis par la norme.