86 votes

Quelle est la signification de char foo(|10|) en C ?

Je suis un programmeur C très expérimenté, mais je suis récemment tombé sur un code sur un ordinateur central qui a une variable locale. Il s'agit d'une simple fonction C qui déclare cette variable, et ensuite strcpy / strcat y insère deux chaînes de caractères, puis tente un fopen .

char foo(|10|);

Ce code est très ancien. Peut-être même vieux de K&R C. Je me demande s'il ne s'agit pas d'une obscure extension de compilateur ou d'une adaptation à un clavier qui n'a pas de [] ou quelque chose comme ça.

Quelqu'un sait-il si cette déclaration est "spéciale" ?

Il s'agit d'un ordinateur central Z/OS standard. Je ne suis pas sûr du compilateur utilisé.

98voto

Nate Eldredge Points 2185

Il semble qu'il s'agisse d'une forme précoce ou non standard de digraphe . Le code a probablement été écrit en utilisant EBCDIC au lieu de l'ASCII, et l'EBCDIC n'a pas de [ ] (du moins pas dans toutes les pages de code).

J'ai trouvé le manuel pour SAS/C un compilateur C apparemment destiné au System/370. A la page 2-10 (page 42 du pdf) vous pouvez voir qu'ils listent (| |) en tant que "formes alternatives" pour les [ ] .

(Bien qu'apparemment | ne figure pas non plus dans toutes les pages de code ; mais peut-être se trouvait-elle dans une page de code plus couramment utilisée ? Je n'en sais rien).

Le C99 a également utilisé des digraphes (et des trigraphes) pour résoudre le même problème, mais il a utilisé des <: :> comme les digraphes, et ??( ??) pour les trigraphes.

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