SORU
31 Temmuz 2014, PERŞEMBE


'\eski Mac için' C derleyicileri altında n değeri OS nedir?

Arka plan:

Sürüm Mac OS sürümlerinde metin dosyaları için 9, standart gösterimi ASCII CR (carriage return) karakteri, değeri ondalık bir satırın sonuna işaretlemek için 13, bir kullanılır.

Mac önceki sürümleri farklı olarak 10, OS, UNIX gibi, ASCII LF (satır besleme) karakteri, değeri ondalık bir satırın sonuna işaretlemek için 10, kullanır.

Soru, karakter sabit değerleri '\n' '\r' C ve C derleyicileri Mac OS sürümleri için önce OS X nedir?

(En az) çekilmiş olabilir iki olası yaklaşım vardır:

  1. Tedavi '\n' olarak EĞER ASCII karakter ve dönüştürmek için ve CR çıkış ve giriş metin akarsu (benzer dönüşüm arasında LF ve CR-EĞER Windows sistemleri); veya
  2. Giriş veya çıkış yok dönüşüm gerektiren ASCII CR karakter olarak '\n' tedavi.

İkinci yaklaşım Olası bazı sorunlar olacaktır. '\n' EĞER varsayan kod başarısız olabilir. (Bu kod doğal olmayan taşınabilir neyse.) Diğeri hala '\r' için ayrı bir değeri olmalı ve ASCII tabanlı bir sistem üzerinde CR tek mantıklı değerdir. Ve C standardı '\n' == '\r' (alıntı, 5.2.2 paragraf 3) bulmak için mafso için teşekkürler, biraz izin vermezdiğerdeğeri '\r' için kullanılan olurdu.

Ve Mac OS altında derlenmiş çalıştırıldığında bu C programının çıktısı ne olurNiçinN10'dan az mı?

#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");
    }
}

Soru iki C ve C için geçerlidir . Cevap her ikisi için de aynı olacağını tahmin ediyorum.

Cevap da başka bir C derleyici farklı olabilir ama derleyici uygulayıcıları birbirleri ile tutarlılığını korumuştur umardım.

Açık olmak gerekirse, Mac OS eski sürümleri temsil etmek için kullanılan temsili satır sonu ne soran ben değilimmetin dosyaları. Benim sorum özellikle ve sadece sabitler '\n' C '\r' veya C kaynak kodu değerlerden söz ediyor. Bunun farkındayım baskı '\n' (değeri ne olursa olsun) bir metin akışı neden dönüştürülecek sistemin satır sonu temsili (bu durumda, ASCII CR); bu davranış tarafından gerekli C standart.

CEVAP
31 Temmuz 2014, PERŞEMBE


Değerleri karakter sabitler \r \n aynı Klasik Mac OS ortamları gibi oldu her yerde: \r CR oldu ASCII 13 (0x0d); \n olsa idi ASCII 10 (0x0a). Tek şey o oldu farklı Klasik Mac OS olduğunu \r olarak kullanıldı "standart" satır sonu metin editörleri gibi \n kullanılan UNİX sistemler, ya da \r\n DOS ve Windows sistemleri.

Burada basit bir test programı OS örneğin 9, Metrowerks CodeWarrior Mac: çalışan bir görüntü var

Example program running in CodeWarrior

Klasik Mac OS sistemleri sistem genelinde standart bir C kütüphanesi yoktu unutmayın! printf() gibi işlevleri sadece bir metin alanı ile bir pencere çıktı yazarak C standart G/Ç uygulanan CodeWarrior için SİOUX gibi derleyici özgü kütüphaneler, parçası da hazır bulundu. Gibi, standart dosya g/Ç bazı uygulamaları \r ve ne düşündüğünü olabilir \n, arasında otomatik çeviri yapmış olabilir. (Birçok Windows sistemleri örneğin fopen() "b" bayrak geçirmek istemezsen mi \r\n benzer şeyler.) Kesinlikle Mac OS Araç içinde böyle bir şey vardı ama.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fufko

    fufko

    27 ŞUBAT 2006
  • Jana Williams

    Jana William

    17 AĞUSTOS 2011
  • optionalinfo

    optionalinfo

    29 EKİM 2005