Bu, ön işleme ve GNU C ile C99 arasındaki bir sonuç zinciridir.
İlk olarak, net/if.h
:
net/if.h
Daha sonra
features.h
içerir, bu #ifdef __USE_MISC
bloğunun içinde struct ifreq
tanımlar.
Yani:
__USE_MISC
nedir
- ? - BSD ve System V
- için ortak olan şeyler bu noktada tanımlanmış mı? - Biz
features.h
,
Şimdi features.h
yılında bir kontrol etmek gerekir:
- Eğer
features.h
ön işleme sırasında varsayılan olarak --std=c99
GCC
- (ne C99 thats beri)
__STRICT_ANSI__
tanımlar kullandığınızda, __STRICT_ANSI__
açık olduğunda, BSD ve System V özellikleri tekme atlamaz. Yani __USE_MISC
tanımsız bırakılır.
Ön işleme sonrasında bile net/if.h
: struct ifreq
bulunmaz! Bu nedenle, depolama alanıyla ilgili şikayet.
Sen yaparak tüm hikayeyi yakalayabilirsiniz:
vimdiff <(cpp test.c --std=c99 -dD) <(cpp test.c --std=gnu99 -dD)
veya başka bir şekilde bunları diff'ing (diff --side-by-side
gibi) yerine vimdiff
arasında.
Sorunun bir kopyası olduğuna inanıyorum: http://stackoverflow.com/questions/3875197/std-c99-wtf-on-linux –