Thread: [Ctags] Ctags and C function prototypes
Brought to you by:
dhiebert
From: Dave S. <ds...@so...> - 2004-01-08 10:10:04
|
I'm having a problem with C source files that have both the function prototypes and definitions in them. The problem is that some of out source files look like this: #include <stdio.h> int foo(int bubba); int foo(int bubba) { printf("Hello world\n"); } main() { foo(1); } Ctags only includes the function prototype, not the actual function itself. If I remove the variable name 'bubba' from the prototype it includes the function, but not the prototype. So my question: How do I force ctags to include duplicate entries (or just ignore the prototype) when faced with code like that above? It would be preferable to not have to change the prototypes (of course). Btw, this is version 5.5.2 running on debian unstable. Any help would be much appreciated. Cheers Dave |
From: Dmitri T. <dm...@ne...> - 2004-01-08 21:30:20
|
On Thu, 8 Jan 2004, Dave Swegen wrote: > I'm having a problem with C source files that have both the function > prototypes and definitions in them. > > The problem is that some of out source files look like this: > > #include <stdio.h> > > int foo(int bubba); > > int foo(int bubba) { > printf("Hello world\n"); > } > > main() { > foo(1); > } Does this particular file exhibit the problem when you run ctags? > Ctags only includes the function prototype, not the actual function > itself. If I remove the variable name 'bubba' from the prototype it > includes the function, but not the prototype. > > So my question: How do I force ctags to include duplicate entries (or > just ignore the prototype) when faced with code like that above? It > would be preferable to not have to change the prototypes (of course). I have not encountered this problem when running ctags 5.5.2 on your test file. The tags file contains only this (correct) entry: foo t.c /^int foo(int bubba) {$/;" f Some questions: - what options are you passing to ctags? - could you include a piece of your generated tags file? - Dmitri. |
From: Dmitri T. <dm...@ne...> - 2004-01-08 21:52:10
|
OK, I think I might know what your problem is. As I was playing with your example, I looked again at the tags file. Now, by default, ctags uses regular expression tags which means that an editor will look for that pattern in the code of the file. Since function declarations are usually on top of the file, and by default, ctags' regexes specify a forward search, it is possible that after a wrap-around a regex will match. For example, if you put in a milti-line argument list in both declaration and the definition, or put semi-colon and opening brace on a separate line from argument list, the regular expression can be the same: File: ----- #include <stdio.h> int foo(int bubba) ; int foo(int bubba) { printf("Hello world\n"); } main() { foo(1); } Tag entry: ---------- foo t.c /^foo(int bubba)$/;" f Note that this regular expression can match _both_ the declaration and the definition. So, searching forward from foo() call in main(), the browser will match function declaration (after it wraps around) and stop. There are two possible solutions to this: read up on -B and --excmd options. - Dmitri. On Thu, 8 Jan 2004, Dmitri Tikhonov wrote: > On Thu, 8 Jan 2004, Dave Swegen wrote: > > > I'm having a problem with C source files that have both the function > > prototypes and definitions in them. > > > > The problem is that some of out source files look like this: > > > > #include <stdio.h> > > > > int foo(int bubba); > > > > int foo(int bubba) { > > printf("Hello world\n"); > > } > > > > main() { > > foo(1); > > } > > Does this particular file exhibit the problem when you run ctags? > > > Ctags only includes the function prototype, not the actual function > > itself. If I remove the variable name 'bubba' from the prototype it > > includes the function, but not the prototype. > > > > So my question: How do I force ctags to include duplicate entries (or > > just ignore the prototype) when faced with code like that above? It > > would be preferable to not have to change the prototypes (of course). > > I have not encountered this problem when running ctags 5.5.2 on your test > file. The tags file contains only this (correct) entry: > > foo t.c /^int foo(int bubba) {$/;" f > > Some questions: > > - what options are you passing to ctags? > - could you include a piece of your generated tags file? > > - Dmitri. |
From: Dave S. <ds...@so...> - 2004-01-09 09:59:38
|
On Thu, Jan 08, 2004 at 04:29:01PM -0500, Dmitri Tikhonov wrote: > > Does this particular file exhibit the problem when you run ctags? *cough* Err, no. Sorry 'bout that. I realised about 20 minutes after sending it that it didn't actually display the problem. I promise I will actually test the sample code before sending it off next time... Cheers Dave |