what's the point of a return type with "__attribute__((noreturn))"?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



  at the moment, we're having an animated discussion over at the linux
kernel mailing list regarding proper usage of attributes, so i'd like
to ask a few questions about how people tend to use them.  as
examples, let's say i wanted to tag a function as deprecated.

  first, i'm assuming that the function declaration (if there is one)
can be written as any one of:

__attribute__((deprecated)) int fubar(void);
int __attribute__((deprecated)) fubar(void);
int fubar(void) __attribute__((deprecated));

  that is, the attribute placement in the declaration is flexible,
even though it appears that that last form seems to be the most
popular, is that right?

  next, once i set an attribute on a function *declaration*, there's
no need to also set it on the subsequent function *definition*.  i
mean, i *could* but that would be redundant, correct?  however, in the
case where there is *only* a function definition, i could write that
definition in one of two ways:

__attribute__((deprecated)) int fubar(void) { ... }
int __attribute__((deprecated)) fubar(void) { ... }

  and, again, that second form seems to be more popular.  so far, so
good?  (just to clarify this in my mind, most of the declarations i've
seen have the attribute at the end, while most definitions put the
attribute between the return type and the routine name.)

  the big issue, though, involves "__attribute__((noreturn))".
the gcc manual on this page:

http://www.delorie.com/gnu/docs/gcc/gcc_55.html

shows the following snippet of code:

...
void fatal () __attribute__ ((noreturn));

void
fatal (...)
{
  ... /* Print error message. */ ...
  exit (1);
}
...

to keep a long question short, even though a "noreturn" routine
doesn't return, is it still traditional to declare it with a return
type of "void"?  thanks.

rday
-- 
========================================================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://fsdev.net/wiki/index.php?title=Main_Page
========================================================================

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux