git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Change "refs/" references to symbolic constants

From
APAndy Parkins <andyparkins@gmail.com>
Date
Feb 20, 2007, 13:26 UTC
Message-ID
<200702201326.46015.andyparkins@gmail.com>
In-Reply-To
<Pine.LNX.4.63.0702201235350.22628@wbgn013.biozentrum.uni-wuerzburg.de>
On Tuesday 2007 February 20 11:37, Johannes Schindelin wrote:
> Actually, it's not even ternary, but to the return value should only be
> handled in terms of >0, ==0, <0.

Apologies, I'm not using ternary in the sense of the number 0, 1 and 2; I'm using it in the sense of there being three possible outcomes - which there are. This is similar to how operators are categorised into unary, binary and ternary categories. I use ternary to mean "having three states or elements", rather than "having the value 0, 1 or 2".

> Ah, and if "!" implies a boolean, then why is "!!" a common construct?
> Because "!" really does not imply a boolean.

Boolean expressions are those that have two possible states - "true" or "false". There are no real booleans in C, so they are faked. The two boolean states in C are represented by

 False = Equal to zero
 True = Not equal to zero

Now, the !! construction you suggest is perfectly in keeping with this definition. Ironically, the only reason you need the !! construction is because of this integer-as-boolean trait of C.

So, to get a boolean in C you use a standard integer (say). My contention is that to improve clarity you should not mix integer-as-boolean and integer-as-integer, even though C will accept it when you do.

 i = 10;
 while( i )
   i--;

This is bad, it abuses the fact that C will let you treat an integer as a boolean. while() takes a boolean expression as it's argument, so I think that you should always hand it something that would be a boolean output (even though C doesn't care if you don't).

 i = 10;
 while( i > 0 )
  i--;

This makes it clear to the reader that i is not boolean. Obviously this is a trivial example; no one would have any trouble understanding either of the two examples. When things start to get bigger and more complicated though, more clarity is always better than less clarity. The principle I try to follow is that code is write-once-read-many. If you save yourself two keystrokes at the expense of the clarity you gain for the 100 times you read that code, then you have made a false economy.

In the end - I don't care - I was only countering Junio's "I prefer !strcmp", with my reasons why I don't like it. I do not expect git to change to my preferred coding style, and I do try to keep to the coding style that the git project uses. To my mind, inconsistency is a worse offence than anything else in a project, so it's always better to go with what is established.

Andy
-- 
Dr Andy Parkins, M Eng (hons), MIEE
andyparkins@gmail.com
Previous: Johannes SchindelinNext: Nicolas Pitre
Message 19 of 30 in “Change "refs/" references to symbolic constants”
  1. Change "refs/" references to symbolic constantsAndy Parkins, Feb 19, 2007
  2. Bill LearFeb 19, 2007
  3. Replace literal STRLEN_ #defines in refs.h with compiler evaluated expressionsAndy Parkins, Feb 19, 2007
  4. Krzysztof HalasaFeb 19, 2007
  5. Shawn O. PearceFeb 19, 2007
  6. Junio C HamanoFeb 19, 2007
  7. Shawn O. PearceFeb 19, 2007
  8. Johannes SchindelinFeb 19, 2007
  9. Andy ParkinsFeb 20, 2007
  10. Junio C HamanoFeb 20, 2007
  11. Andy ParkinsFeb 20, 2007
  12. Junio C HamanoFeb 20, 2007
  13. Andy ParkinsFeb 20, 2007
  14. Junio C HamanoFeb 20, 2007
  15. Andy ParkinsFeb 20, 2007
  16. Johannes SchindelinFeb 20, 2007
  17. Simon 'corecode' SchubertFeb 20, 2007
  18. Johannes SchindelinFeb 20, 2007
  19. Andy ParkinsFeb 20, 2007
  20. Nicolas PitreFeb 20, 2007
  21. 1/4 Add prefixcmp()Junio C Hamano, Feb 20, 2007
  22. David KågedalFeb 20, 2007
  23. Junio C HamanoFeb 20, 2007
  24. 2/4 Mechanical conversion to use prefixcmp()Junio C Hamano, Feb 20, 2007
  25. Junio C HamanoFeb 20, 2007
  26. Johannes SchindelinFeb 20, 2007
  27. Junio C HamanoFeb 21, 2007
  28. Johannes SchindelinFeb 21, 2007
  29. 3/4 prefixcmp(): fix-up mechanical conversion.Junio C Hamano, Feb 20, 2007
  30. 4/4 prefixcmp(): fix-up leftover strncmp().Junio C Hamano, Feb 20, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.