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

Re: [PATCH 1/4] Add history graph API

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Apr 7, 2008, 16:15 UTC
Message-ID
<alpine.LFD.1.00.0804070905410.11277@woody.linux-foundation.org>
In-Reply-To
<alpine.DEB.1.00.0804062315090.12583@eeepc-johanness>
On Sun, 6 Apr 2008, Johannes Schindelin wrote:
> 
> AFAICT you do not even need them then.  Using "struct strbuf *" without 
> ever declaring struct strbuf before that is perfectly valid.
In traditional C, and inside structure declarations etc, yes.
In modern C, in other contexts, no.

Modern C considers a function declaration to be its own scope (it's the scope of the function definition, which in a declaration is obviously just the declaration). So if you use a "struct xyzzy *" in a function declaration, it will be a *different* "struct xyzzy *" from one declared later.

Try to compile something like this:
	int fn(struct xyzzy *);
	int fn(struct xyzzy *);

with a modern C compiler, and it will actually say something along the lines of "conflicting types for ‘fn’", because while the two declarations look identical, they actually have two different (private) declarations of "struct xyzzy" going on.

But to make it even more interesting, you don't actually need a full declaration of "struct xyzzy" to make the compiler happy, you only need an implicit one ahead of time. You can do that with the incomplete declaration, of course (like the --graph patch did), ie just a simple

	struct xyzzy;

before those declarations is sufficient, but so is the implicit declaration of just using the pointer to it in some non-private scope, ie it's equally valid to do

	struct foobar {
		struct xyzzy *ptr;
	};

and this will already be enough to declare "struct xyzzy" in scope for the function declarations afterwards.

Is this illogical? Somewhat. Why is it a private scope in a function declaration but not in a struct declaration? Why isn't the function scope limited to the stuff *inside* the function? Somebody probably knows, but for the rest of us the answer is just "that's how it is, deal with it".

			Linus
Previous: Adam SimpkinsNext: Junio C Hamano
Message 32 of 37 in “Add history graph API”
  1. 1/4 Add history graph APIAdam Simpkins, Apr 6, 2008
  2. 2/4 graph API: Added additional utility functions to the graph APIAdam Simpkins, Apr 6, 2008
  3. 3/4 git log and git rev-list: Add --graph optionAdam Simpkins, Apr 6, 2008
  4. 4/4 git log: Updated --graph to work even when the commit list is prunedAdam Simpkins, Apr 6, 2008
  5. 5/5 Document the new --graph option for log and rev-listAdam Simpkins, Apr 6, 2008
  6. 1/4 graph API: Fixed coding style problemsAdam Simpkins, Apr 7, 2008
  7. 2/4 log and rev-list: Fixed newline termination issues with --graphAdam Simpkins, Apr 7, 2008
  8. 3/4 log and rev-list: Fix --graph output with --pretty=emailAdam Simpkins, Apr 7, 2008
  9. 4/4 log and rev-list: Improve --graph output when commits have been prunedAdam Simpkins, Apr 7, 2008
  10. Junio C HamanoApr 7, 2008
  11. Junio C HamanoApr 7, 2008
  12. Jeff KingApr 7, 2008
  13. Junio C HamanoApr 7, 2008
  14. Adam SimpkinsApr 7, 2008
  15. Jakub NarebskiApr 7, 2008
  16. Junio C HamanoApr 8, 2008
  17. Govind SalinasApr 8, 2008
  18. Junio C HamanoApr 8, 2008
  19. Teemu LikonenApr 6, 2008
  20. Adam SimpkinsApr 6, 2008
  21. Teemu LikonenApr 6, 2008
  22. Adam SimpkinsApr 6, 2008
  23. Johannes SchindelinApr 6, 2008
  24. Adam SimpkinsApr 6, 2008
  25. Teemu LikonenApr 7, 2008
  26. Adam SimpkinsApr 7, 2008
  27. Teemu LikonenApr 7, 2008
  28. Johannes SchindelinApr 6, 2008
  29. Adam SimpkinsApr 6, 2008
  30. Johannes SchindelinApr 6, 2008
  31. Adam SimpkinsApr 6, 2008
  32. Linus TorvaldsApr 7, 2008
  33. Junio C HamanoApr 7, 2008
  34. bash: Add command line completion of --graph (git log)Teemu Likonen, Apr 6, 2008
  35. bash: Add more command line option completions for 'git log'Teemu Likonen, Apr 7, 2008
  36. Teemu LikonenApr 7, 2008
  37. Adam SimpkinsApr 7, 2008

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.