From jas at extundo.com Tue Apr 4 14:27:54 2006 From: jas at extundo.com (Simon Josefsson) Date: Tue, 04 Apr 2006 14:27:54 +0200 Subject: [gnutls-dev] Re: constification patch In-Reply-To: <7085.71450454674$1135791111@news.gmane.org> (Bryan Henderson's message of "Wed, 28 Dec 2005 17:31:51 +0000 (UTC)") References: <7085.71450454674$1135791111@news.gmane.org> Message-ID: <87slotcyph.fsf@latte.josefsson.org> bryanh at giraffe-data.com (Bryan Henderson) writes: > I've spent some time investigating the issue of "inline" keywords in > portable code. For those who haven't had the pleasure: > > First of all, the "inline" keyword rarely affects speed. Why? > Because a modern compiler inlines on its own when it helps. (And if > you disable optimization, many will _not_ inline even if you use the > keyword). Some compilers actually ignore the "inline" keyword > completely, and others don't have one. > > So no one should be afraid to take some lines out of the middle of a > function and make it a separate function for readability, out of fear > that the subroutine call will take too long. And functions should be > used instead of macros where possible because they're a lot easier to > read and debug and the compiler can type-check arguments. > > The main reason for "inline" these days is to avoid a warning that > you've defined a function and not used it (because when you put a > static function in a header file, many programs that include that > header file won't use it). > > Compilers variously have "inline", "__inline", "__inline__", and > nothing at all. "__inline" and "__inline__" are sometimes macros and > sometimes native keywords. > > The best thing to do is to put a mess of ifdefs in a central file that > define __inline__ as the appropriate keyword or undefined, and use > __inline__ in functions that are defined in header files. I don't > know GNU Autoconf, but I presume it provides a service to help with > that. Right, there is AC_C_INLINE which should #define 'inline' to some suitable string for each compiler, or nothing at all if the compiler doesn't support it. GnuTLS uses it. (Sorry for the slow response.) /Simon