2013-05-16 17 views
5

, bu C çalışıyor:Neden const nitelikli bir değişkeni C cinsinden dizi boyutu olarak kullanabiliyorum? Aşağıdaki kodu çalıştırdığınızda

#include<stdio.h> 

int main(void) 
{ 

const int x=5; 
char arr[x]; 
printf("%d",sizeof(arr)); 

} 

Ama sadece bunu const nitelikli değişkenler real sabitleri (yani onlar case durumda kullanılamaz yüzden değil önce okumak vardı switch-case), ancak IBM aşağıdaki linki (IBMLINK) ve diyor doğruluyor:

const int k = 10; 
int ary[k];  /* allowed in C++, not legal in C */ 

Neden o zaman C a bir const nitelikli değişkeni kullanmak için izin değilim herhangi bir hata olmadan bir dizi boyutu nedir?

+2

IBM bağlantınız C standardıyla güncel değil. Son 14 yılda güncellenmiş bir C referansı kullanın. – Lundin

+0

Başlık ve metni "index" den "size" olarak değiştirdim. Terim terimi yalnızca belirli bir üyeyi belirtmek için bir dizi kullandığınızda kullanılır. Bir beyan veya tanımda, nesnenin boyutunu bir bütün olarak bildirirsiniz. –

cevap

10

c99 destek değişken uzunluk diziler ama c90 değişken uzunluk dizileri desteklemez, size gcc kullanıyorsanız bu daha net görmek ve bu argümanları ile derlemeye deneyebilirsiniz:

gcc -std=c89 -pedantic 

bu size aşağıdaki verecek uyarı:

warning: ISO C90 forbids variable length array ‘y’ [-Wvla] 

ancak c99 kullanarak derlemek eğer gayet olumlu:

gcc -std=c99 -pedantic 

olarak 2011 C standart değişken uzunlukta diziler (VLA) arasında John Bode işaret isteğe bağlı hale getirilmiştir. İşte VLA üzerinde bir Dr Dobbs makale ve aynı zamanda Wayne Conrad tarafından işaret edildiği gibi gcc docs bir bağlantı.

+0

"c99" altında dizi dizini de bir işlev dönüşü anlamına gelebilir mi? – Jugni

+0

@Jugni Bu –

+0

ben 'c99' altındaki her dizinin uzunluğu derleyici tarafından bilinen gerektiğini dair hiçbir kural olduğu sonucuna Shall ince olmalıdır? Yani derleyiciye bilinmelidir IBM portal yazılmıştır. Bu nedenle, c99 'dan sonra böyle bir gereksinimin olmadığını doğrulayabilir misiniz? İşlevlerin iadesi, hatta genel ** değişkenler ** (const' niteleyicisi ile veya yok) dizi dizini olabilir mi? – Jugni

İlgili konular