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
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.

nasıl web standart bağlantılar ( <a...
C 11 Derleyici: en Yakın standart ve n...
Ne kadar iyi insanlar YANİ yükseltmek ...
Ne kadar yavaş Java istisnalar vardır?...
Ne kadar hızlı C göre D ?...