Coding style question

From: <korryd(at)enterprisedb(dot)com>
To: <pgsql-hackers(at)postgresql(dot)org>
Subject: Coding style question
Date: 2006-11-02 18:34:19
Message-ID: 1162492459.7998.254.camel@sakai.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I've noticed a trend in the PostgreSQL code base - for some reason, we
tend to avoid initializing automatic variables (actually, the code base
is pretty mixed on this point).

For example in _bt_check_unique() we have:

________________________________________________________________________

static TransactionId
_bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
Buffer buf, ScanKey itup_scankey)
{
TupleDesc itupdesc = RelationGetDescr(rel);
int natts = rel->rd_rel->relnatts;
OffsetNumber offset,
maxoff;
Page page;
BTPageOpaque opaque;
Buffer nbuf = InvalidBuffer;

page = BufferGetPage(buf);
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
maxoff = PageGetMaxOffsetNumber(page);
offset = _bt_binsrch(rel, buf, natts, itup_scankey, false);
...

________________________________________________________________________

Notice that four variables are not initialized; instead we assign values
to them immediately after declaring them.

I would probably write that as:

________________________________________________________________________

static TransactionId
_bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
Buffer buf, ScanKey itup_scankey)
{
TupleDesc itupdesc = RelationGetDescr(rel);
int natts = rel->rd_rel->relnatts;
Page page = BufferGetPage(buf);
OffsetNumber maxoff = PageGetMaxOffsetNumber(page);
BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
OffsetNumber offset = _bt_binsrch(rel, buf, natts, itup_scankey, false);
Buffer nbuf = InvalidBuffer;
...

________________________________________________________________________

I'm not trying to be pedantic (it just comes naturally), but is there
some reason that the first form would be better? I know that there is
no difference in the resulting code, so this is purely a
style/maintainability question.

I guess the first form let's you intersperse comments (which is good).

On the other hand, the second form makes it easy to see which variables
are un-initialized. The second form also prevents you from adding any
code between declaring the variable and assigning a value to it (which
is good in complicated code; you might introduce a reference to an
unitialized variable).

Just curious.

-- Korry

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Henry B. Hotz 2006-11-02 18:45:24 Re: Design Considerations for New Authentication Methods
Previous Message Jeff Davis 2006-11-02 18:31:12 Re: Tsearch2 index size