Em sáb., 21 de ago. de 2021 às 12:02, Andrew Dunstan <and...@dunslane.net> escreveu:
> > On 8/20/21 12:30 PM, Ranier Vilela wrote: > > > > > > There is a reason why GMs Brian Kernighan and Dennis Ritchie made the > > C89, less buggy. > > IMHO C99 makes it easy to make more mistakes. > > One more step and we won't even need to declare a variable. > > > > > > I've used both styles in different languages over the years. I don't > know that one is a clearly better way, notwithstanding what various > theorists might say. > IMO declarations first is better, without a shadow of a doubt. Maybe because my mind is vision. Seeing the complete view, I can look for bugs and find some way to improve performance. It's one of the reasons for having small, well-defined functions. Of course, with extra reward, you can and should reduce the scope. In this case the compiler does a better job and generates more optimized code. XLogRecPtr XLogInsertRecord(XLogRecData *rdata, XLogRecPtr fpw_lsn, uint8 flags, int num_fpi) { XLogCtlInsert *Insert = &XLogCtl->Insert; /* What is the purpose of this variable */ XLogRecord *rechdr = (XLogRecord *) rdata->data; /* What is the purpose of this variable */ XLogRecPtr StartPos; /* What is the purpose of this variable */ XLogRecPtr EndPos; /* What is the purpose of this variable */ pg_crc32c rdata_crc; /* What is the purpose of this variable */ uint8 info = rechdr->xl_info & ~XLR_INFO_MASK; bool isLogSwitch = (rechdr->xl_rmid == RM_XLOG_ID && info == XLOG_SWITCH); bool prevDoPageWrites = doPageWrites; bool inserted; /* we assume that all of the record header is in the first chunk */ Assert(rdata->len >= SizeOfXLogRecord); /* cross-check on whether we should be here or not */ if (!XLogInsertAllowed()) elog(ERROR, "cannot make new WAL entries during recovery"); All declarations organized by type and use, almost a structure. No need to find or think, just see. We can immediately connect variable info with isLogSwitch. > Note that in C89 it's fantastically easy to put the declaration as close > as you like to the first use of a variable. All it takes is a pair of > braces enclosing the variable scope. > IMO is an exception, which does not follow the C89 pattern. It's a valid last resource, of course, but not as good practice. > Even if we were to relax our rules on this, making wholesale changes > along these lines and even more backpatching them seem out of the question. > It would be a nightmare. regards, Ranier Vilela