SORU
27 Aralık 2014, CUMARTESİ


Gcc standart başlıklar o kadar çok parantez

Neden GCC başlık dosyaları sabit ifadeler böyle parantez çevrili.

#define INTMAX_MIN (-9223372036854775807LL)
#define INTMAX_MAX (9223372036854775807LL)

Eğer parantez ben atlarsanız farkı, bu yolu ne olurdu?

#define INTMAX_MIN -9223372036854775807LL
#define INTMAX_MAX 9223372036854775807LL

Ve neden 'L' soneki? Eğer aşağıdaki yazarsam aynı mı olurdu?

#define INTMAX_MIN -9223372036854775807
#define INTMAX_MAX 9223372036854775807

Gerçek bir yararı yoktur ya da her zaman aynı şey mi?

'L' duran uzun ve aynı zamanda C makroları parantez öneminin farkındayım; meraktan soruyorum soruyorum bunu. farkındayım

CEVAP
27 Aralık 2014, CUMARTESİ


Yazarsan

a = 7 INTMAX_MIN;

sözdizimi hatası, geçersiz bir ifade olurdu dışardan bakınca çünkü beklediğiniz. Ve genişliyor çünkü

a = 7 (-9223372036854775807LL);

nitekim hatası verir. Ama parantez olmadan büyütmek için:

a = 7 -9223372036854775807LL;

eğer bir hata, sizin istediğiniz belli olmamasına rağmen vermiyor.

Daha genel olarak, bu tüm tanımlayıcıları gibi görünen şeyler için açılımları ver tanımlar. Bir aritmetik ifadede, bir tanımlayıcı "" ama-9223372036854775807LL değildir. ilk ifade Ancak, ayraçlı bir ifade"". birincil ifade

Ve gerçek nedeni bu. Makro ne genişler böylecebenziyorbir şey için birincil bir ifade bubirincil bir ifade. Asla ne olacağını şaşıracaksınız. Programlama, sürpriz genellikle kötüdür.

Genellikle önemli değil, ama tanımlar yazanlar onları genellikle çalışmak istemiyorum. Onları her zaman çalışmak istiyorlar.

Sondaki LL bu tamsayı türü olarak edebi işaretleri genellikle (bu durumda) 64 bit olan long long,. LL sonek olmadan, edebi int, long int, ya da 64-bit değerleri destekleyen ilk hangisi long long int olarak yorumlanabilir. Bu tür aşağı çivileme değeri aşağı çivileme kadar önemli olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006