Retazce a CR LF v C

Jan Waclawek konfera na efton.sk
Středa Leden 30 09:02:31 CET 2013


>On 29. 1. 2013 22:32, Andrej Jancura wrote:
>> Mna prave pomylilo, ze som si pamatal, ze \n na kompilatore pre PC
>> alebo zeby terminal v PC tu sekvenciu urobi sam, teda posle CR a LF. A
>> dnes som to po 10 rokoch potreboval pre jednocip a to uz vsunulo len
>> CR... Ale uz som si to nasiel, nastudoval a zapisal do poznamok.

Rozdiel je v tom, ze co presne je "posle" a "vsunulo".

C99, 5.2.2#2&3:
Alphabetic escape sequences representing nongraphic characters in the
execution
character set are intended to produce actions on display devices as follows:
[...]
\n (newline)Moves the active position to the initial position of the next
line.
[...]
Each of these escape sequences shall produce a unique
implementation-defined value
which can be stored in a single char object. The external representations
in a text file
need not be identical to the internal representations, and are outside the
scope of this
International Standard.

Inaksie povedane, prekladac je povinny \n v prelozit ako jeden znak, pricom
to *nemusi* byt 13 (aj ked by bolo asi velkym prekvapenim, kebyze to tak
nie je; ak je potrebne mat stopercentnu istotu ze to bude 13 tak je
potrebne pouzit \xC alebo \15). Takto je ten znak potom ulozeny v pamati
napriklad, alebo ked sa zapise do binarneho suboru. 

Ale ak sa ten znak zapisuje do textoveho suboru (alebo na externe
zariadenie textoveho charakteru, napriklad alfanumericky terminal alebo
este lepsie dalekopis, ako to k jazyku C prinalezi ;-) ) tak *by sa mal*
uplatnit jednak ten vyznam znaku (presun na pociatocnu poziciu
nasledujuceho riadku), a druhak ta posledna veta (t.j. ze sa pri
zapise/citani do/z textoveho suboru moze ten znak interpretovat inak,
trebars aj sekvenciou viacerych znakov). To, ci tuto konverziu urobi
samotna [kniznicna] funkcia, ktora ten zapis/citanie vykonava; alebo sa
spolahne ze to urobia sluzby operacneho systemu, alebo sa na to jednoducho
vykasle, je potom ponechane na lubovoli prekladaca...

S \r je to analogicky.

wek





Další informace o konferenci Hw-list