SORU
5 AĞUSTOS 2009, ÇARŞAMBA


C Trigraph dizileri amacı ?

C '03 Standart 2.3/1: göre

Başka bir işlem gerçekleşmeden önce, üç karakter aşağıdaki dizilerden birini seçebilirsiniz (“trigraph dizileri”) tek karakteri Tablo 1. belirtilen değiştirilir

----------------------------------------------------------------------------
| trigraph | replacement | trigraph | replacement | trigraph | replacement |
----------------------------------------------------------------------------
| ??=      | #           | ??(      | [           | ??<      | {           |
| ??/      | \           | ??)      | ]           | ??>      | }           |
| ??’      | ˆ           | ??!      | |           | ??-      | ˜           |
----------------------------------------------------------------------------

Bu kod demek oluyor ki gerçek hayatta printf( "What??!\n" ); ??! | karakteri ile değiştirilir trigraph bir dizi olduğu için What| baskı neden olur.

Benim sorum ne amaçla trigraphs kullanarak mı?Trigraphs kullanarak pratik bir avantajı var mı?

UDPCevap bazı Avrupa klavyeler tüm noktalama karakterleri yok bahsedildi, yani ABD dışındaki programcılar günlük yaşam trigraphs kullanmak zorunda?

UPD2: Visual Studio 2010 trigraph desteği varsayılan olarak devre dışı bıraktı.

CEVAP
5 AĞUSTOS 2009, ÇARŞAMBA


This question (about the closely related digraphs) bir cevabı var.

Kaynar Aşağı için aslında ISO 646 karakter kümesi yok tüm karakterlerin C sözdizimi, bu yüzden bazı sistemler ile klavye ve görüntüler olmaz anlaşma ile karakterler (gerçi sanırım bu oldukça nadir bugünlerde).

Genel olarak, bunları kullanmak zorunda değilsiniz, ama koştu tam olarak sorunu için onlar hakkında bilmeniz gerekir. Trigraphs nedeni '?' karakteri, bir çıkış sırası vardır:

'\?'

Örnek sorunu önlemek için birkaç yol vardır:

 printf( "What?\?!\n" ); 

 printf( "What?" "?!\n" );

Ama iki yazarken hatırlamak zorunda '? trigraph bir başlangıç olabileceğini' karakterleri (ve kesinlikle hiç düşündüğüm bir şey değil).

Uygulamada, trigraphs ve digraphs endişe etmene gerek yok bir gün-gün bazında. Ama bir hata bunlarla ilgili (ve günün geri kalanında kendi varlığına küfür geçirirsin) içine edeceğiz bir kez her birkaç yılda bir, çünkü bunların farkında olmalıdır. Eğer bilerek Derleyiciler ile anlaşma yapmam gereken bir şey var diye trigraph ya da bir çift grafik eşleşmesi genelinde gelir, ne zaman uyarmak için yapılandırılmış (veya hata) olabilir eğer iyi olurdu.

Ve sadece bütünlüğü için, digraphs bir dize içinde bir çift grafik eşleşmesi bir çift grafik eşleşmesi olarak yorumlanan o mu belirteçleri olarak işlenmiş, onlar beri çok daha az tehlikelidir.

C/C programları (defintinely saçımı çekerek beni olurdu trigraph bir hata da dahil olmak üzere) noktalama işaretleri ile çeşitli eğlenceli güzel bir eğitim için, Herb Sutter's GOTW #86 article bir göz atın.

< / ^ hr .

Ek:

GCC (ve hakkında uyarır) varsayılan olarak trigraphs işlemez gibi görünüyor. Başka Derleyiciler trigraph desteği devre dışı bırakmak için Seçenek (IBM örneğin). Microsoft açıkça etkinleştirilmesi gereken bir uyarı (C4837) VS2008 destek (Duvar veya bir şey kullanarak) başladı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 07cadikiz07

    07cadikiz07

    17 EKİM 2007
  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011