>>> extern struct netif_stats le_stats[]; >>> ... >>> struct netif_stats le_stats[NLE_IFS];
>> [riastradh@ and I say to s/extern/static/ and add static to the >> later declaration, if le_stats can be file-local] > Thanks, using 'static' as a forward declaration just works. I may be misreading here, but this sounds as though you're converting the `extern' to `static' but _not_ adding `static' to the later declaration. If so, well, this is not valid C, at least not as of C99. If it "just works", that is because the compiler in use is willing to wave off the violation, not because it is correct. (Or, potentially, it is adhering to a different standard, though I'd be surprised if any other standard differs in this respect.) C99 6.2.2, "Linkages of identifiers" [#3] If the declaration of a file scope identifier for an object or a function contains the storage-class specifier static, the identifier has internal linkage.22) (the 22 is a reference to a footnote that's about functions and thus not relevant here). So, the first declaration gives it internal linkage. [#5] [...text about functions... ...] If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external. And the second declaration gives it external linkage. [#7] If, within a translation unit, the same identifier appears with both internal and external linkage, the behavior is undefined. Hence, undefined. /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTML mo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B