Re: C99
Mark Kettenis <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
> Date: Tue, 16 Jul 2013 14:40:24 -0700 > From: Doug Evans <[email protected]> > > On Tue, Jul 16, 2013 at 2:22 PM, Mark Kettenis <[email protected]> wrote: > >> From: Tom Tromey <[email protected]> > >> Date: Tue, 16 Jul 2013 14:51:36 -0600 > >> > >> I'd like to draw attention to this patch: > >> > >> http://sourceware.org/ml/gdb-patches/2013-06/msg00808.html > >> > >> This points out that gdb has been unconditionally using a GCC extension, > >> apparently since at least 2010; the patch introducing the varargs define > >> in tracepoint.c was 7c56ce7 (2010-04-09). > >> > >> The patch proposes replacing this with the corresponding C99 construct. > >> > >> So, I'd like to propose we allow the use of C99 in gdb. In particular I > >> think we ought to require a C99 preprocessor -- enabling this particular > >> patch to go in and also allowing the use of "//" comments. > > > > Perhaps it is time to move on and start requiring a C99 compiler for GDB. > > But "//" comments are offensive to real C programmers! ;) > > > > Seriously though. This points out that such a switch has some > > consequences for our coding standards. We have a fairly consistent > > coding style in GDB, which makes it easy for people to move around in > > the codebase without getting distracted by the "looks" of the code. I > > think it's worth some effort to keep it that way. And allowing "//" > > comments isn't going to help. I'd vote for not using them at all. > > I don't see // as a serious issue, but I can live with it either way. > > > However, a more important C99 "misfeature" that affects the coding > > standard is the possibility to declare varaibles anywhere in the code. > > We should not allow this, except for declaring loop variables in a > > for() statement. > > Can you elaborate? Code like this: int foobar(char *foo, int bar) { sprintf(foo, "%d", bar) int j = strlen(foo); return j; } is bad if you're trained to look for variable declerations at the start of a block. C90 doesn't allow this; C99 changed that. Most hardcore C programmers consider this a bad decision by the standard committe. Most people do accept the following though: int foobar(int bar) { int sum = 0; for (int i = 0; i < bar; i++) sum += i; return sum; }