Wireshark-dev: Re: [Wireshark-dev] initializing a variable with a non-constant value
On Sun, Oct 14, 2012 at 1:36 PM, Martin Kaiser <lists@xxxxxxxxx> wrote:
> Hi,
>
> doc/README.developer says
>
> Don't initialize variables in their declaration with non-constant
> values. Not all compilers support this. E.g. don't use
> guint32 i = somearray[2];
> ...
>
> In file.c, read_packet(), we do
>
> const struct wtap_pkthdr *phdr = wtap_phdr(cf->wth);
> union wtap_pseudo_header *pseudo_header = wtap_pseudoheader(cf->wth);
> const guchar *buf = wtap_buf_ptr(cf->wth);
>
>
> The two things are in contradiction and I'm wondering how to fix this.
> Apparently, there's been no complaints about compiler problems with
> read_packet() so I was wondering if the limitation in README.developer
> is still required.
>
> Any views about this? Or any idea which compilers could potentially be
> affected?
>
> Thanks,
>
> Martin
This is very similar in theme to my question about variadic macros a
few weeks ago [1]. The conclusion there was that they're not
officially part of C89 which is Wireshark's official C version. Even
though it seems all of the compilers we use support that particular
C99 extension, we can't move to C99 officially because MSVC doesn't
support all of it, so it's simpler for everyone if we try to stick to
pure C89.
It's obviously not a big deal if the occasional C99 slips in
accidentally as long as it doesn't cause any build problems, but we
should try to avoid it where possible.
Cheers,
Evan
[1] https://www.wireshark.org/lists/wireshark-dev/201209/msg00142.html