C Dili Temel konseptler

IBenKimim

Yeni üye
1 Eki 2022
18
7

Yorumlar​


Temel konseptler

Yorumlar, bir tür kod içi belgeleme işlevi görür. Bir programa eklendiklerinde, derleyici tarafından etkin bir şekilde yok sayılırlar; bunlar yalnızca kaynak kodunu okuyan insanlar tarafından not olarak kullanılmak üzere tasarlanmıştır.

Sözdizimi​

/* yorum */(1)
// yorum(2)(C99'dan beri)
1)Genellikle "C tarzı" veya "çok satırlı" yorumlar olarak bilinir.
2)Genellikle "C++ stili" veya "tek satırlı" yorumlar olarak bilinir.

Çeviri aşamaları​


C kaynak dosyası derleyici tarafından aşağıdaki aşamalar tam olarak bu sırayla gerçekleşiyormuş gibi işlenir. Gerçek uygulama, bu eylemleri birleştirebilir veya davranış aynı olduğu sürece bunları farklı şekilde işleyebilir.

Faz 1​

1)Kaynak kod dosyasının bireysel baytları (genellikle UTF-8 gibi bazı çok baytlı kodlamalarda bir metin dosyasıdır) uygulama tanımlı şekilde kaynak karakter kümesinin karakterlerine eşlenir . Özellikle, işletim sistemine bağlı satır sonu göstergeleri yeni satır karakterleriyle değiştirilir.Kaynak karakter kümesi , aşağıdaki 96 karakterden oluşan, tek baytlık bir alt küme olarak temel kaynak karakter kümesini içeren çok baytlı bir karakter kümesidir :

C:
a)5 boşluk karakteri (boşluk, yatay sekme, dikey sekme, form beslemesi, yeni satır)
b)10 haneli karakter'0'ile'9'
c)52 mektup'a'ile'z've'A'ile'Z'
d)29 noktalama karakteri:_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ "

2) Trigraf dizileri , karşılık gelen tek karakterli temsillerle değiştirilir.

C kaynak kodu, ASCII olmayanlar da dahil olmak üzere, ISO 646:1983 değişmez karakter setini içeren herhangi bir 8 bitlik karakter setinde yazılabilir . Ancak, bazı C operatörleri ve noktalama işaretleri, ISO 646 kod kümesinin dışında kalan karakterler gerektirir: {, }, [, ], #, \, ^, |, ~. Bu sembollerin bir kısmının veya tamamının bulunmadığı (Alman DIN 66003 gibi ) karakter kodlamalarını kullanabilmek için iki olasılık vardır: bu karakterleri kullanan operatörlerin alternatif yazımları veya iki veya üç ISO 646 uyumlu karakterin özel kombinasyonları bunlar tek bir ISO 646 olmayan karaktermiş gibi yorumlanır

Operatör makroları (C95)​

ISO646 dışı karakterler kullanan operatörler için <iso646.h>makro olarak tanımlanan alternatif yazımlar vardır:

Bash:
Öncelik    Alternatif
&&
 
and
(operatör makrosu)
&=
 
and_eq
(operatör makrosu)
&
 
bitand
(operatör makrosu)
|
 
bitor
(operatör makrosu)
~
 
compl
(operatör makrosu)
!
 
not
(operatör makrosu)
!=
 
not_eq
(operatör makrosu)
||
 
or
(operatör makrosu)
|=
 
or_eq
(operatör makrosu)
^
 
xor
(operatör makrosu)
^=
 
xor_eq
(operatör makrosu)

Karakterler&ve!ISO-646 kapsamında değişmezdir, ancak daha da kısıtlayıcı geçmiş karakter kümelerini barındırmak için yine de bu karakterleri kullanan operatörler için alternatifler sağlanmıştır.

Alternatif yazım yok (örneğineşdeğer) eşitlik operatörü için==çünkü karakter=desteklenen tüm karakter kümelerinde mevcuttu.

Alternatif belirteçler (C95)​

Aşağıdaki alternatif belirteçler, çekirdek dilin bir parçasıdır ve dilin tüm yönleriyle, her bir alternatif belirteç, kendi yazım dışında, birincil belirteci ile tamamen aynı şekilde davranır ( stringification operatörü yazımı görünür hale getirebilir). İki harfli alternatif belirteçlere bazen "digraflar" denir.
Kod:
Öncelik    Alternatif
{    <%
}    %>
[    <:
]    :>
#    %:
##    %:%:

Trigraflar​

Aşağıdaki üç karakterli gruplar (trigraflar), yorumlar ve dize değişmezleri tanınmadan önce ayrıştırılır ve bir üçlemenin her görünümü, karşılık gelen birincil karakterle değiştirilir:

Trigraflar erken işlendiğinden, aşağıdaki gibi bir yorum// Sonraki satır yürütülecek mi?????/aşağıdaki satırı etkili bir şekilde yorumlayacaktır ve dize değişmezi gibi"Neler oluyor??!"olarak ayrıştırılır"Neler oluyor|".

Örnek​

Aşağıdaki örnek, başlıktan alternatif operatör yazımlarını ve <iso646.h>ayrıca digrafların ve trigrafların kullanımını gösterir. İlk komut satırı bağımsız değişkenindeki boşluk karakteri, argv[1], tırnak işaretleri gerektirir: ", Dünya!".

Kod:
% : < stdlib içerir . h >
% : < stdio'yu içerir . h >
% : < iso646 içerir . h >
 
int ana ( int argc, karakter ** argv )
?? <
    if  ( argc >  1 ve argv < : 1 : > not_eq NULL )
    < %
       printf ( " Merhaba%s \n " , argv < : 1 : > ) ;
    % >
 
     EXIT_SUCCESS döndür ;
?? >

Selam Dünya!
tamam buda bitigne göre kaldıgımız yerden devam edelim

Faz 2​

1)Bir satırın sonunda ters eğik çizgi göründüğünde (hemen ardından yeni satır karakteri gelir), hem ters eğik çizgi hem de yeni satır silinir ve iki fiziksel kaynak satırı tek bir mantıksal kaynak satırında birleştirilir. Bu tek geçişli bir işlemdir: iki ters eğik çizgi ve ardından boş bir satırla biten bir satır, üç satırı tek bir satırda birleştirmez.
2)Boş olmayan bir kaynak dosya, bu adımdan sonra yeni satır karakteriyle bitmiyorsa (başlangıçta satırsonu yoksa veya ters eğik çizgiyle bitiyorsa), davranış tanımsızdır.

3. Aşama​

1)Kaynak dosya, yorumlara , boşluk karakter dizilerine (boşluk, yatay sekme, yeni satır, dikey sekme ve form beslemesi) ve aşağıdakiler olan ön işleme belirteçlerine ayrıştırılır.
a)başlık isimleri:< stdio. h >veya"dosyam.h"
b) tanımlayıcılar
c)tamsayı sabitlerini ve kayan sabitleri kapsayan, ancak aynı zamanda aşağıdakiler gibi bazı geçersiz belirteçleri de kapsayan ön işleme sayıları1 .. E + 3. fooveya0JBK
d) karakter sabitleri ve dize değişmezleri
e)operatörler ve noktalama işaretleri, örneğin+,<<=,< %, veya##.
f)başka bir kategoriye sığmayan, boşluk olmayan bireysel karakterler
2)Her yorum bir boşluk karakteri ile değiştirilir
3)Yeni satırlar tutulur ve yeni satır olmayan boşluk dizilerinin tek boşluk karakterlerine daraltılıp daraltılamayacağı uygulama tarafından tanımlanır.
Girdi, belirli bir karaktere kadar ön işleme belirteçlerine ayrıştırılmışsa, sonraki ön işleme belirteci, sonraki analizin başarısız olmasına neden olsa bile, genellikle bir ön işleme belirteci oluşturabilecek en uzun karakter dizisi olarak alınır. Bu genellikle maksimal munch olarak bilinir .

Kod:
int foo =  1 ;
int bar =  0xE + foo ;    // hata: geçersiz ön işleme numarası 0xE+foo
int baz =  0xE  + foo ;  // Tamam
int pub = bar +++ baz ;    // Tamam: bar++ + baz
int ham = bar ++-++ baz ;  // Tamam: bar++ - ++baz
int qux = bar +++++ baz ;  // hata: bar++ ++ +baz, bar++ + ++baz değil.

Maksimum munch kuralının tek istisnası:

Kod:
#define MACRO_1 1
#define MACRO_2 2
#define MACRO_3 3
#define MACRO_EXPR (MACRO_1 <MACRO_2> MACRO_3) // Tamam: <MACRO_2> bir başlık adı değil

4. Aşama​

1) Önişlemci yürütülür.
2)#include yönergesi ile tanıtılan her dosya, 1'den 4'e kadar olan aşamalardan geçer.
3)Bu aşamanın sonunda, tüm önişlemci yönergeleri kaynaktan kaldırılır.

5. Aşama​

1)Karakter sabitlerindeki ve dize değişmezlerindeki tüm karakterler ve kaçış dizileri , kaynak karakter kümesinden yürütme karakter kümesine dönüştürülür (bu , UTF-8 gibi çok baytlı bir karakter kümesi olabilir , fazda listelenen temel kaynak karakter kümesindeki 96 karakterin tamamı sürece 1 tek baytlık temsillere sahiptir). Bir kaçış dizisi tarafından belirtilen karakter, yürütme karakter kümesinin bir üyesi değilse, sonuç uygulama tarafından tanımlanır, ancak boş (geniş) bir karakter olmayacağı garanti edilir.
Not: Bu aşamada gerçekleştirilen dönüştürme, bazı uygulamalarda komut satırı seçenekleriyle kontrol edilebilir: gcc ve clang kullanımı- finput - karakter setikaynak karakter kümesinin kodlamasını belirtmek için,- fexec - karakter setive- fwide - exec - karakter setidize değişmezlerinde ve kodlama önekine sahip olmayan karakter sabitlerinde (C11'den beri) yürütme karakter kümesinin kodlamalarını belirtmek için .

6. Aşama​

Bitişik dize değişmezleri birleştirilir.

7. Aşama​

Derleme gerçekleşir: belirteçler sözdizimsel ve anlamsal olarak analiz edilir ve bir çeviri birimi olarak çevrilir.

8. Aşama​

Bağlantı gerçekleşir: Dış referansları karşılamak için gereken çeviri birimleri ve kitaplık bileşenleri, yürütme ortamında (OS) yürütülmesi için gereken bilgileri içeren bir program görüntüsünde toplanır.

burasıda hal olduguna göre en baştaki konumuza dönelim herşeyi anladıysanız

C tarzı​

C tarzı yorumlar genellikle büyük metin bloklarını veya küçük kod parçalarını yorumlamak için kullanılır; ancak, tek satırları yorumlamak için kullanılabilirler. Metni C tarzı bir yorum olarak eklemek için metni ve ile /*çevreleyin */. /*C tarzı yorumlar, derleyiciye ve arasındaki tüm içeriği yoksaymasını söyler */. C standardının bir parçası olmamasına /**ve */genellikle belge bloklarını belirtmek için kullanılmasına rağmen; bu yasaldır çünkü ikinci yıldız işareti basitçe yorumun bir parçası olarak değerlendirilir.

Bir karakter sabiti , bir dize değişmezi veya bir yorum dışında, karakterler /*bir yorum sunar. Böyle bir yorumun içeriği sadece çok baytlı karakterleri belirlemek ve */yorumu sonlandıran karakterleri bulmak için incelenir. C tarzı yorumlar iç içe olamaz.

C++ tarzı​

C++ tarzı yorumlar genellikle tek satırlık metin veya kodu yorumlamak için kullanılır; ancak, çok satırlı yorumlar oluşturmak için bir araya yerleştirilebilirler. Metni C++ stili bir yorum olarak eklemek için, metnin önüne //yeni satır karakteri ile gelmeniz ve metni takip etmeniz yeterlidir. //C++ tarzı yorumlar, derleyiciye yeni bir satır arasındaki tüm içeriği yoksaymasını söyler .
Bir karakter sabiti , bir dize değişmezi veya bir yorum dışında, karakterler // bir sonraki yeni satır karakterine kadar olan tüm çok baytlı karakterleri içeren bir yorum sunar. Böyle bir yorumun içeriği sadece çok baytlı karakterleri belirlemek ve yorumu sonlandıran yeni satır karakterini bulmak için incelenir. C++ tarzı yorumlar iç içe yerleştirilebilir
C:
// y = f(x); // algoritmayı çağır

C++ stili bir yorumda C stili bir yorum görünebilir:


Kod:
// y = f(x); /* algoritmayı çağır */

C-tarzı bir yorum içinde C++-tarzı bir yorum görünebilir; bu, küçük bir kaynak kod bloğunu hariç tutmak için bir mekanizmadır:

C:
/*
    y = f(x); // algoritmaları çağır
    z = g(x);
*/

Notlar​

Yorumlar önişlemci aşamasından önce kaldırıldığından , bir yorum oluşturmak için bir makro kullanılamaz ve sonlandırılmamış bir C tarzı yorum #include'd dosyasından taşmaz.

C:
/* Bir yorum oluşturmak için bir makro kullanma girişimi. */
/* Ancak, "//" karakterlerinin yerini bir boşluk alır. */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
... 
PRINTF ( " %s dosyasında %i \n satırında hata " , __FILE__, __LINE__ ) ;

Yorumlamanın yanı sıra, kaynak kodu hariç tutma için kullanılan diğer mekanizmalar şunlardır:


C:
#if 0
    koyar ( "bu derlenmeyecek" ) ;
    /* C tarzı yorumlarla
    çakışma yok */ // C++ tarzı yorumlarla çakışma yok
#endif

ve

C:
if ( 0 )  {
    puts ( " bu derlenecek ancak çalıştırılmayacak " ) ;
    /* C tarzı yorumlarla
    çakışma yok */ // C++ tarzı yorumlarla çakışma yok
}

// yorumlarının C99'da tanıtılması, bazı nadir durumlarda önemli bir değişiklikti:

C:
a = b //*bölen:*/ c
+ d ;  /* C89 a = b / c + d'yi derler;
        C99, a = b + d'yi derler; */

Örnek​


C:
#include <stdio.h>
/*
C tarzı yorumlar şunları içerebilir:
birden fazla satır.
*/
 
/* Veya, sadece bir satır. */
 
// C++ tarzı yorumlar bir satır yorum yapabilir.
 
// Veya,
// birlikte dizilebilirler.
 
int main ( void )
{
  // Aşağıdaki kod çalıştırılmayacak
  // puts("Merhaba");
 
  // Aşağıdaki kod çalıştırılacaktır
  puts ( "World" ) ;
 
  // Ters eğik çizgi + yeni satır ile ilgili bir not.
  // Çeviri aşaması 2'ye (yorumlar için aşama 3'e karşı) ait olmasına rağmen,
  // '\' hala kaynak kodun hangi bölümünün 'yorum' olarak değerlendirileceğini belirler
  // 'yorum' olarak:
  // Bu yorum bir sonraki satıra yükseltilecek \
  puts("Çalıştırılmayacak"); // bir uyarı verebilir "çok satırlı yorum"
  koyar ( "Merhaba, tekrar" ) ;
}

istek üzerine devamını getire bilirm
not:belirli kaynaklardan destek alınarak yazılmıştır kendi yorumlarıma ekliyerek!
 

ScriptKid

Katılımcı Üye
5 Şub 2022
608
91

Yorumlar​


Temel konseptler

Yorumlar, bir tür kod içi belgeleme işlevi görür. Bir programa eklendiklerinde, derleyici tarafından etkin bir şekilde yok sayılırlar; bunlar yalnızca kaynak kodunu okuyan insanlar tarafından not olarak kullanılmak üzere tasarlanmıştır.

Sözdizimi​

/* yorum */(1)
// yorum(2)(C99'dan beri)
1)Genellikle "C tarzı" veya "çok satırlı" yorumlar olarak bilinir.
2)Genellikle "C++ stili" veya "tek satırlı" yorumlar olarak bilinir.

Çeviri aşamaları​


C kaynak dosyası derleyici tarafından aşağıdaki aşamalar tam olarak bu sırayla gerçekleşiyormuş gibi işlenir. Gerçek uygulama, bu eylemleri birleştirebilir veya davranış aynı olduğu sürece bunları farklı şekilde işleyebilir.

Faz 1​

1)Kaynak kod dosyasının bireysel baytları (genellikle UTF-8 gibi bazı çok baytlı kodlamalarda bir metin dosyasıdır) uygulama tanımlı şekilde kaynak karakter kümesinin karakterlerine eşlenir . Özellikle, işletim sistemine bağlı satır sonu göstergeleri yeni satır karakterleriyle değiştirilir.Kaynak karakter kümesi , aşağıdaki 96 karakterden oluşan, tek baytlık bir alt küme olarak temel kaynak karakter kümesini içeren çok baytlı bir karakter kümesidir :

C:
a)5 boşluk karakteri (boşluk, yatay sekme, dikey sekme, form beslemesi, yeni satır)
b)10 haneli karakter'0'ile'9'
c)52 mektup'a'ile'z've'A'ile'Z'
d)29 noktalama karakteri:_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ "

2) Trigraf dizileri , karşılık gelen tek karakterli temsillerle değiştirilir.

C kaynak kodu, ASCII olmayanlar da dahil olmak üzere, ISO 646:1983 değişmez karakter setini içeren herhangi bir 8 bitlik karakter setinde yazılabilir . Ancak, bazı C operatörleri ve noktalama işaretleri, ISO 646 kod kümesinin dışında kalan karakterler gerektirir: {, }, [, ], #, \, ^, |, ~. Bu sembollerin bir kısmının veya tamamının bulunmadığı (Alman DIN 66003 gibi ) karakter kodlamalarını kullanabilmek için iki olasılık vardır: bu karakterleri kullanan operatörlerin alternatif yazımları veya iki veya üç ISO 646 uyumlu karakterin özel kombinasyonları bunlar tek bir ISO 646 olmayan karaktermiş gibi yorumlanır

Operatör makroları (C95)​

ISO646 dışı karakterler kullanan operatörler için <iso646.h>makro olarak tanımlanan alternatif yazımlar vardır:

Bash:
Öncelik    Alternatif
&&
 
and
(operatör makrosu)
&=
 
and_eq
(operatör makrosu)
&
 
bitand
(operatör makrosu)
|
 
bitor
(operatör makrosu)
~
 
compl
(operatör makrosu)
!
 
not
(operatör makrosu)
!=
 
not_eq
(operatör makrosu)
||
 
or
(operatör makrosu)
|=
 
or_eq
(operatör makrosu)
^
 
xor
(operatör makrosu)
^=
 
xor_eq
(operatör makrosu)

Karakterler&ve!ISO-646 kapsamında değişmezdir, ancak daha da kısıtlayıcı geçmiş karakter kümelerini barındırmak için yine de bu karakterleri kullanan operatörler için alternatifler sağlanmıştır.

Alternatif yazım yok (örneğineşdeğer) eşitlik operatörü için==çünkü karakter=desteklenen tüm karakter kümelerinde mevcuttu.

Alternatif belirteçler (C95)​

Aşağıdaki alternatif belirteçler, çekirdek dilin bir parçasıdır ve dilin tüm yönleriyle, her bir alternatif belirteç, kendi yazım dışında, birincil belirteci ile tamamen aynı şekilde davranır ( stringification operatörü yazımı görünür hale getirebilir). İki harfli alternatif belirteçlere bazen "digraflar" denir.
Kod:
Öncelik    Alternatif
{    <%
}    %>
[    <:
]    :>
#    %:
##    %:%:

Trigraflar​

Aşağıdaki üç karakterli gruplar (trigraflar), yorumlar ve dize değişmezleri tanınmadan önce ayrıştırılır ve bir üçlemenin her görünümü, karşılık gelen birincil karakterle değiştirilir:

Trigraflar erken işlendiğinden, aşağıdaki gibi bir yorum// Sonraki satır yürütülecek mi?????/aşağıdaki satırı etkili bir şekilde yorumlayacaktır ve dize değişmezi gibi"Neler oluyor??!"olarak ayrıştırılır"Neler oluyor|".

Örnek​

Aşağıdaki örnek, başlıktan alternatif operatör yazımlarını ve <iso646.h>ayrıca digrafların ve trigrafların kullanımını gösterir. İlk komut satırı bağımsız değişkenindeki boşluk karakteri, argv[1], tırnak işaretleri gerektirir: ", Dünya!".

Kod:
% : < stdlib içerir . h >
% : < stdio'yu içerir . h >
% : < iso646 içerir . h >
 
int ana ( int argc, karakter ** argv )
?? <
    if  ( argc >  1 ve argv < : 1 : > not_eq NULL )
    < %
       printf ( " Merhaba%s \n " , argv < : 1 : > ) ;
    % >
 
     EXIT_SUCCESS döndür ;
?? >

Selam Dünya!
tamam buda bitigne göre kaldıgımız yerden devam edelim

Faz 2​

1)Bir satırın sonunda ters eğik çizgi göründüğünde (hemen ardından yeni satır karakteri gelir), hem ters eğik çizgi hem de yeni satır silinir ve iki fiziksel kaynak satırı tek bir mantıksal kaynak satırında birleştirilir. Bu tek geçişli bir işlemdir: iki ters eğik çizgi ve ardından boş bir satırla biten bir satır, üç satırı tek bir satırda birleştirmez.
2)Boş olmayan bir kaynak dosya, bu adımdan sonra yeni satır karakteriyle bitmiyorsa (başlangıçta satırsonu yoksa veya ters eğik çizgiyle bitiyorsa), davranış tanımsızdır.

3. Aşama​

1)Kaynak dosya, yorumlara , boşluk karakter dizilerine (boşluk, yatay sekme, yeni satır, dikey sekme ve form beslemesi) ve aşağıdakiler olan ön işleme belirteçlerine ayrıştırılır.
a)başlık isimleri:< stdio. h >veya"dosyam.h"
b) tanımlayıcılar
c)tamsayı sabitlerini ve kayan sabitleri kapsayan, ancak aynı zamanda aşağıdakiler gibi bazı geçersiz belirteçleri de kapsayan ön işleme sayıları1 .. E + 3. fooveya0JBK
d) karakter sabitleri ve dize değişmezleri
e)operatörler ve noktalama işaretleri, örneğin+,<<=,< %, veya##.
f)başka bir kategoriye sığmayan, boşluk olmayan bireysel karakterler
2)Her yorum bir boşluk karakteri ile değiştirilir
3)Yeni satırlar tutulur ve yeni satır olmayan boşluk dizilerinin tek boşluk karakterlerine daraltılıp daraltılamayacağı uygulama tarafından tanımlanır.
Girdi, belirli bir karaktere kadar ön işleme belirteçlerine ayrıştırılmışsa, sonraki ön işleme belirteci, sonraki analizin başarısız olmasına neden olsa bile, genellikle bir ön işleme belirteci oluşturabilecek en uzun karakter dizisi olarak alınır. Bu genellikle maksimal munch olarak bilinir .

Kod:
int foo =  1 ;
int bar =  0xE + foo ;    // hata: geçersiz ön işleme numarası 0xE+foo
int baz =  0xE  + foo ;  // Tamam
int pub = bar +++ baz ;    // Tamam: bar++ + baz
int ham = bar ++-++ baz ;  // Tamam: bar++ - ++baz
int qux = bar +++++ baz ;  // hata: bar++ ++ +baz, bar++ + ++baz değil.

Maksimum munch kuralının tek istisnası:

Kod:
#define MACRO_1 1
#define MACRO_2 2
#define MACRO_3 3
#define MACRO_EXPR (MACRO_1 <MACRO_2> MACRO_3) // Tamam: <MACRO_2> bir başlık adı değil

4. Aşama​

1) Önişlemci yürütülür.
2)#include yönergesi ile tanıtılan her dosya, 1'den 4'e kadar olan aşamalardan geçer.
3)Bu aşamanın sonunda, tüm önişlemci yönergeleri kaynaktan kaldırılır.

5. Aşama​

1)Karakter sabitlerindeki ve dize değişmezlerindeki tüm karakterler ve kaçış dizileri , kaynak karakter kümesinden yürütme karakter kümesine dönüştürülür (bu , UTF-8 gibi çok baytlı bir karakter kümesi olabilir , fazda listelenen temel kaynak karakter kümesindeki 96 karakterin tamamı sürece 1 tek baytlık temsillere sahiptir). Bir kaçış dizisi tarafından belirtilen karakter, yürütme karakter kümesinin bir üyesi değilse, sonuç uygulama tarafından tanımlanır, ancak boş (geniş) bir karakter olmayacağı garanti edilir.
Not: Bu aşamada gerçekleştirilen dönüştürme, bazı uygulamalarda komut satırı seçenekleriyle kontrol edilebilir: gcc ve clang kullanımı- finput - karakter setikaynak karakter kümesinin kodlamasını belirtmek için,- fexec - karakter setive- fwide - exec - karakter setidize değişmezlerinde ve kodlama önekine sahip olmayan karakter sabitlerinde (C11'den beri) yürütme karakter kümesinin kodlamalarını belirtmek için .

6. Aşama​

Bitişik dize değişmezleri birleştirilir.

7. Aşama​

Derleme gerçekleşir: belirteçler sözdizimsel ve anlamsal olarak analiz edilir ve bir çeviri birimi olarak çevrilir.

8. Aşama​

Bağlantı gerçekleşir: Dış referansları karşılamak için gereken çeviri birimleri ve kitaplık bileşenleri, yürütme ortamında (OS) yürütülmesi için gereken bilgileri içeren bir program görüntüsünde toplanır.

burasıda hal olduguna göre en baştaki konumuza dönelim herşeyi anladıysanız

C tarzı​

C tarzı yorumlar genellikle büyük metin bloklarını veya küçük kod parçalarını yorumlamak için kullanılır; ancak, tek satırları yorumlamak için kullanılabilirler. Metni C tarzı bir yorum olarak eklemek için metni ve ile /*çevreleyin */. /*C tarzı yorumlar, derleyiciye ve arasındaki tüm içeriği yoksaymasını söyler */. C standardının bir parçası olmamasına /**ve */genellikle belge bloklarını belirtmek için kullanılmasına rağmen; bu yasaldır çünkü ikinci yıldız işareti basitçe yorumun bir parçası olarak değerlendirilir.

Bir karakter sabiti , bir dize değişmezi veya bir yorum dışında, karakterler /*bir yorum sunar. Böyle bir yorumun içeriği sadece çok baytlı karakterleri belirlemek ve */yorumu sonlandıran karakterleri bulmak için incelenir. C tarzı yorumlar iç içe olamaz.

C++ tarzı​

C++ tarzı yorumlar genellikle tek satırlık metin veya kodu yorumlamak için kullanılır; ancak, çok satırlı yorumlar oluşturmak için bir araya yerleştirilebilirler. Metni C++ stili bir yorum olarak eklemek için, metnin önüne //yeni satır karakteri ile gelmeniz ve metni takip etmeniz yeterlidir. //C++ tarzı yorumlar, derleyiciye yeni bir satır arasındaki tüm içeriği yoksaymasını söyler .
Bir karakter sabiti , bir dize değişmezi veya bir yorum dışında, karakterler // bir sonraki yeni satır karakterine kadar olan tüm çok baytlı karakterleri içeren bir yorum sunar. Böyle bir yorumun içeriği sadece çok baytlı karakterleri belirlemek ve yorumu sonlandıran yeni satır karakterini bulmak için incelenir. C++ tarzı yorumlar iç içe yerleştirilebilir
C:
// y = f(x); // algoritmayı çağır

C++ stili bir yorumda C stili bir yorum görünebilir:


Kod:
// y = f(x); /* algoritmayı çağır */

C-tarzı bir yorum içinde C++-tarzı bir yorum görünebilir; bu, küçük bir kaynak kod bloğunu hariç tutmak için bir mekanizmadır:

C:
/*
    y = f(x); // algoritmaları çağır
    z = g(x);
*/

Notlar​

Yorumlar önişlemci aşamasından önce kaldırıldığından , bir yorum oluşturmak için bir makro kullanılamaz ve sonlandırılmamış bir C tarzı yorum #include'd dosyasından taşmaz.

C:
/* Bir yorum oluşturmak için bir makro kullanma girişimi. */
/* Ancak, "//" karakterlerinin yerini bir boşluk alır. */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...
PRINTF ( " %s dosyasında %i \n satırında hata " , __FILE__, __LINE__ ) ;

Yorumlamanın yanı sıra, kaynak kodu hariç tutma için kullanılan diğer mekanizmalar şunlardır:


C:
#if 0
    koyar ( "bu derlenmeyecek" ) ;
    /* C tarzı yorumlarla
    çakışma yok */ // C++ tarzı yorumlarla çakışma yok
#endif

ve

C:
if ( 0 )  {
    puts ( " bu derlenecek ancak çalıştırılmayacak " ) ;
    /* C tarzı yorumlarla
    çakışma yok */ // C++ tarzı yorumlarla çakışma yok
}

// yorumlarının C99'da tanıtılması, bazı nadir durumlarda önemli bir değişiklikti:

C:
a = b //*bölen:*/ c
+ d ;  /* C89 a = b / c + d'yi derler;
        C99, a = b + d'yi derler; */

Örnek​


C:
#include <stdio.h>
/*
C tarzı yorumlar şunları içerebilir:
birden fazla satır.
*/
 
/* Veya, sadece bir satır. */
 
// C++ tarzı yorumlar bir satır yorum yapabilir.
 
// Veya,
// birlikte dizilebilirler.
 
int main ( void )
{
  // Aşağıdaki kod çalıştırılmayacak
  // puts("Merhaba");
 
  // Aşağıdaki kod çalıştırılacaktır
  puts ( "World" ) ;
 
  // Ters eğik çizgi + yeni satır ile ilgili bir not.
  // Çeviri aşaması 2'ye (yorumlar için aşama 3'e karşı) ait olmasına rağmen,
  // '\' hala kaynak kodun hangi bölümünün 'yorum' olarak değerlendirileceğini belirler
  // 'yorum' olarak:
  // Bu yorum bir sonraki satıra yükseltilecek \
  puts("Çalıştırılmayacak"); // bir uyarı verebilir "çok satırlı yorum"
  koyar ( "Merhaba, tekrar" ) ;
}

istek üzerine devamını getire bilirm
not:belirli kaynaklardan destek alınarak yazılmıştır kendi yorumlarıma ekliyerek!
C# dilinide biraz tanıtır mısın
 

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28
Ell

Yorumlar​


Temel konseptler

Yorumlar, bir tür kod içi belgeleme işlevi görür. Bir programa eklendiklerinde, derleyici tarafından etkin bir şekilde yok sayılırlar; bunlar yalnızca kaynak kodunu okuyan insanlar tarafından not olarak kullanılmak üzere tasarlanmıştır.

Sözdizimi​

/* yorum */(1)
// yorum(2)(C99'dan beri)
1)Genellikle "C tarzı" veya "çok satırlı" yorumlar olarak bilinir.
2)Genellikle "C++ stili" veya "tek satırlı" yorumlar olarak bilinir.

Çeviri aşamaları​


C kaynak dosyası derleyici tarafından aşağıdaki aşamalar tam olarak bu sırayla gerçekleşiyormuş gibi işlenir. Gerçek uygulama, bu eylemleri birleştirebilir veya davranış aynı olduğu sürece bunları farklı şekilde işleyebilir.

Faz 1​

1)Kaynak kod dosyasının bireysel baytları (genellikle UTF-8 gibi bazı çok baytlı kodlamalarda bir metin dosyasıdır) uygulama tanımlı şekilde kaynak karakter kümesinin karakterlerine eşlenir . Özellikle, işletim sistemine bağlı satır sonu göstergeleri yeni satır karakterleriyle değiştirilir.Kaynak karakter kümesi , aşağıdaki 96 karakterden oluşan, tek baytlık bir alt küme olarak temel kaynak karakter kümesini içeren çok baytlı bir karakter kümesidir :

C:
a)5 boşluk karakteri (boşluk, yatay sekme, dikey sekme, form beslemesi, yeni satır)
b)10 haneli karakter'0'ile'9'
c)52 mektup'a'ile'z've'A'ile'Z'
d)29 noktalama karakteri:_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ "

2) Trigraf dizileri , karşılık gelen tek karakterli temsillerle değiştirilir.

C kaynak kodu, ASCII olmayanlar da dahil olmak üzere, ISO 646:1983 değişmez karakter setini içeren herhangi bir 8 bitlik karakter setinde yazılabilir . Ancak, bazı C operatörleri ve noktalama işaretleri, ISO 646 kod kümesinin dışında kalan karakterler gerektirir: {, }, [, ], #, \, ^, |, ~. Bu sembollerin bir kısmının veya tamamının bulunmadığı (Alman DIN 66003 gibi ) karakter kodlamalarını kullanabilmek için iki olasılık vardır: bu karakterleri kullanan operatörlerin alternatif yazımları veya iki veya üç ISO 646 uyumlu karakterin özel kombinasyonları bunlar tek bir ISO 646 olmayan karaktermiş gibi yorumlanır

Operatör makroları (C95)​

ISO646 dışı karakterler kullanan operatörler için <iso646.h>makro olarak tanımlanan alternatif yazımlar vardır:

Bash:
Öncelik    Alternatif
&&
 
and
(operatör makrosu)
&=
 
and_eq
(operatör makrosu)
&
 
bitand
(operatör makrosu)
|
 
bitor
(operatör makrosu)
~
 
compl
(operatör makrosu)
!
 
not
(operatör makrosu)
!=
 
not_eq
(operatör makrosu)
||
 
or
(operatör makrosu)
|=
 
or_eq
(operatör makrosu)
^
 
xor
(operatör makrosu)
^=
 
xor_eq
(operatör makrosu)

Karakterler&ve!ISO-646 kapsamında değişmezdir, ancak daha da kısıtlayıcı geçmiş karakter kümelerini barındırmak için yine de bu karakterleri kullanan operatörler için alternatifler sağlanmıştır.

Alternatif yazım yok (örneğineşdeğer) eşitlik operatörü için==çünkü karakter=desteklenen tüm karakter kümelerinde mevcuttu.

Alternatif belirteçler (C95)​

Aşağıdaki alternatif belirteçler, çekirdek dilin bir parçasıdır ve dilin tüm yönleriyle, her bir alternatif belirteç, kendi yazım dışında, birincil belirteci ile tamamen aynı şekilde davranır ( stringification operatörü yazımı görünür hale getirebilir). İki harfli alternatif belirteçlere bazen "digraflar" denir.
Kod:
Öncelik    Alternatif
{    <%
}    %>
[    <:
]    :>
#    %:
##    %:%:

Trigraflar​

Aşağıdaki üç karakterli gruplar (trigraflar), yorumlar ve dize değişmezleri tanınmadan önce ayrıştırılır ve bir üçlemenin her görünümü, karşılık gelen birincil karakterle değiştirilir:

Trigraflar erken işlendiğinden, aşağıdaki gibi bir yorum// Sonraki satır yürütülecek mi?????/aşağıdaki satırı etkili bir şekilde yorumlayacaktır ve dize değişmezi gibi"Neler oluyor??!"olarak ayrıştırılır"Neler oluyor|".

Örnek​

Aşağıdaki örnek, başlıktan alternatif operatör yazımlarını ve <iso646.h>ayrıca digrafların ve trigrafların kullanımını gösterir. İlk komut satırı bağımsız değişkenindeki boşluk karakteri, argv[1], tırnak işaretleri gerektirir: ", Dünya!".

Kod:
% : < stdlib içerir . h >
% : < stdio'yu içerir . h >
% : < iso646 içerir . h >
 
int ana ( int argc, karakter ** argv )
?? <
    if  ( argc >  1 ve argv < : 1 : > not_eq NULL )
    < %
       printf ( " Merhaba%s \n " , argv < : 1 : > ) ;
    % >
 
     EXIT_SUCCESS döndür ;
?? >

Selam Dünya!
tamam buda bitigne göre kaldıgımız yerden devam edelim

Faz 2​

1)Bir satırın sonunda ters eğik çizgi göründüğünde (hemen ardından yeni satır karakteri gelir), hem ters eğik çizgi hem de yeni satır silinir ve iki fiziksel kaynak satırı tek bir mantıksal kaynak satırında birleştirilir. Bu tek geçişli bir işlemdir: iki ters eğik çizgi ve ardından boş bir satırla biten bir satır, üç satırı tek bir satırda birleştirmez.
2)Boş olmayan bir kaynak dosya, bu adımdan sonra yeni satır karakteriyle bitmiyorsa (başlangıçta satırsonu yoksa veya ters eğik çizgiyle bitiyorsa), davranış tanımsızdır.

3. Aşama​

1)Kaynak dosya, yorumlara , boşluk karakter dizilerine (boşluk, yatay sekme, yeni satır, dikey sekme ve form beslemesi) ve aşağıdakiler olan ön işleme belirteçlerine ayrıştırılır.
a)başlık isimleri:< stdio. h >veya"dosyam.h"
b) tanımlayıcılar
c)tamsayı sabitlerini ve kayan sabitleri kapsayan, ancak aynı zamanda aşağıdakiler gibi bazı geçersiz belirteçleri de kapsayan ön işleme sayıları1 .. E + 3. fooveya0JBK
d) karakter sabitleri ve dize değişmezleri
e)operatörler ve noktalama işaretleri, örneğin+,<<=,< %, veya##.
f)başka bir kategoriye sığmayan, boşluk olmayan bireysel karakterler
2)Her yorum bir boşluk karakteri ile değiştirilir
3)Yeni satırlar tutulur ve yeni satır olmayan boşluk dizilerinin tek boşluk karakterlerine daraltılıp daraltılamayacağı uygulama tarafından tanımlanır.
Girdi, belirli bir karaktere kadar ön işleme belirteçlerine ayrıştırılmışsa, sonraki ön işleme belirteci, sonraki analizin başarısız olmasına neden olsa bile, genellikle bir ön işleme belirteci oluşturabilecek en uzun karakter dizisi olarak alınır. Bu genellikle maksimal munch olarak bilinir .

Kod:
int foo =  1 ;
int bar =  0xE + foo ;    // hata: geçersiz ön işleme numarası 0xE+foo
int baz =  0xE  + foo ;  // Tamam
int pub = bar +++ baz ;    // Tamam: bar++ + baz
int ham = bar ++-++ baz ;  // Tamam: bar++ - ++baz
int qux = bar +++++ baz ;  // hata: bar++ ++ +baz, bar++ + ++baz değil.

Maksimum munch kuralının tek istisnası:

Kod:
#define MACRO_1 1
#define MACRO_2 2
#define MACRO_3 3
#define MACRO_EXPR (MACRO_1 <MACRO_2> MACRO_3) // Tamam: <MACRO_2> bir başlık adı değil

4. Aşama​

1) Önişlemci yürütülür.
2)#include yönergesi ile tanıtılan her dosya, 1'den 4'e kadar olan aşamalardan geçer.
3)Bu aşamanın sonunda, tüm önişlemci yönergeleri kaynaktan kaldırılır.

5. Aşama​

1)Karakter sabitlerindeki ve dize değişmezlerindeki tüm karakterler ve kaçış dizileri , kaynak karakter kümesinden yürütme karakter kümesine dönüştürülür (bu , UTF-8 gibi çok baytlı bir karakter kümesi olabilir , fazda listelenen temel kaynak karakter kümesindeki 96 karakterin tamamı sürece 1 tek baytlık temsillere sahiptir). Bir kaçış dizisi tarafından belirtilen karakter, yürütme karakter kümesinin bir üyesi değilse, sonuç uygulama tarafından tanımlanır, ancak boş (geniş) bir karakter olmayacağı garanti edilir.
Not: Bu aşamada gerçekleştirilen dönüştürme, bazı uygulamalarda komut satırı seçenekleriyle kontrol edilebilir: gcc ve clang kullanımı- finput - karakter setikaynak karakter kümesinin kodlamasını belirtmek için,- fexec - karakter setive- fwide - exec - karakter setidize değişmezlerinde ve kodlama önekine sahip olmayan karakter sabitlerinde (C11'den beri) yürütme karakter kümesinin kodlamalarını belirtmek için .

6. Aşama​

Bitişik dize değişmezleri birleştirilir.

7. Aşama​

Derleme gerçekleşir: belirteçler sözdizimsel ve anlamsal olarak analiz edilir ve bir çeviri birimi olarak çevrilir.

8. Aşama​

Bağlantı gerçekleşir: Dış referansları karşılamak için gereken çeviri birimleri ve kitaplık bileşenleri, yürütme ortamında (OS) yürütülmesi için gereken bilgileri içeren bir program görüntüsünde toplanır.

burasıda hal olduguna göre en baştaki konumuza dönelim herşeyi anladıysanız

C tarzı​

C tarzı yorumlar genellikle büyük metin bloklarını veya küçük kod parçalarını yorumlamak için kullanılır; ancak, tek satırları yorumlamak için kullanılabilirler. Metni C tarzı bir yorum olarak eklemek için metni ve ile /*çevreleyin */. /*C tarzı yorumlar, derleyiciye ve arasındaki tüm içeriği yoksaymasını söyler */. C standardının bir parçası olmamasına /**ve */genellikle belge bloklarını belirtmek için kullanılmasına rağmen; bu yasaldır çünkü ikinci yıldız işareti basitçe yorumun bir parçası olarak değerlendirilir.

Bir karakter sabiti , bir dize değişmezi veya bir yorum dışında, karakterler /*bir yorum sunar. Böyle bir yorumun içeriği sadece çok baytlı karakterleri belirlemek ve */yorumu sonlandıran karakterleri bulmak için incelenir. C tarzı yorumlar iç içe olamaz.

C++ tarzı​

C++ tarzı yorumlar genellikle tek satırlık metin veya kodu yorumlamak için kullanılır; ancak, çok satırlı yorumlar oluşturmak için bir araya yerleştirilebilirler. Metni C++ stili bir yorum olarak eklemek için, metnin önüne //yeni satır karakteri ile gelmeniz ve metni takip etmeniz yeterlidir. //C++ tarzı yorumlar, derleyiciye yeni bir satır arasındaki tüm içeriği yoksaymasını söyler .
Bir karakter sabiti , bir dize değişmezi veya bir yorum dışında, karakterler // bir sonraki yeni satır karakterine kadar olan tüm çok baytlı karakterleri içeren bir yorum sunar. Böyle bir yorumun içeriği sadece çok baytlı karakterleri belirlemek ve yorumu sonlandıran yeni satır karakterini bulmak için incelenir. C++ tarzı yorumlar iç içe yerleştirilebilir
C:
// y = f(x); // algoritmayı çağır

C++ stili bir yorumda C stili bir yorum görünebilir:


Kod:
// y = f(x); /* algoritmayı çağır */

C-tarzı bir yorum içinde C++-tarzı bir yorum görünebilir; bu, küçük bir kaynak kod bloğunu hariç tutmak için bir mekanizmadır:

C:
/*
    y = f(x); // algoritmaları çağır
    z = g(x);
*/

Notlar​

Yorumlar önişlemci aşamasından önce kaldırıldığından , bir yorum oluşturmak için bir makro kullanılamaz ve sonlandırılmamış bir C tarzı yorum #include'd dosyasından taşmaz.

C:
/* Bir yorum oluşturmak için bir makro kullanma girişimi. */
/* Ancak, "//" karakterlerinin yerini bir boşluk alır. */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...
PRINTF ( " %s dosyasında %i \n satırında hata " , __FILE__, __LINE__ ) ;

Yorumlamanın yanı sıra, kaynak kodu hariç tutma için kullanılan diğer mekanizmalar şunlardır:


C:
#if 0
    koyar ( "bu derlenmeyecek" ) ;
    /* C tarzı yorumlarla
    çakışma yok */ // C++ tarzı yorumlarla çakışma yok
#endif

ve

C:
if ( 0 )  {
    puts ( " bu derlenecek ancak çalıştırılmayacak " ) ;
    /* C tarzı yorumlarla
    çakışma yok */ // C++ tarzı yorumlarla çakışma yok
}

// yorumlarının C99'da tanıtılması, bazı nadir durumlarda önemli bir değişiklikti:

C:
a = b //*bölen:*/ c
+ d ;  /* C89 a = b / c + d'yi derler;
        C99, a = b + d'yi derler; */

Örnek​


C:
#include <stdio.h>
/*
C tarzı yorumlar şunları içerebilir:
birden fazla satır.
*/
 
/* Veya, sadece bir satır. */
 
// C++ tarzı yorumlar bir satır yorum yapabilir.
 
// Veya,
// birlikte dizilebilirler.
 
int main ( void )
{
  // Aşağıdaki kod çalıştırılmayacak
  // puts("Merhaba");
 
  // Aşağıdaki kod çalıştırılacaktır
  puts ( "World" ) ;
 
  // Ters eğik çizgi + yeni satır ile ilgili bir not.
  // Çeviri aşaması 2'ye (yorumlar için aşama 3'e karşı) ait olmasına rağmen,
  // '\' hala kaynak kodun hangi bölümünün 'yorum' olarak değerlendirileceğini belirler
  // 'yorum' olarak:
  // Bu yorum bir sonraki satıra yükseltilecek \
  puts("Çalıştırılmayacak"); // bir uyarı verebilir "çok satırlı yorum"
  koyar ( "Merhaba, tekrar" ) ;
}

istek üzerine devamını getire bilirm
not:belirli kaynaklardan destek alınarak yazılmıştır kendi yorumlarıma ekliyerek!
Ellerine saglik
 

Ghost Killer

Harici Saldırı Timleri Koordinatörü
13 Ocak 2019
11,318
7,709
Eline sağlık, özgün ve görselli halini yazarsan hem senin için hem forum için daha yararlı olacaktır.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.