Thread (1 message) 1 message, 1 author, 2016-02-26

Re: backtrace(3): Inconsistency and missing indentation

From: Michael Kerrisk (man-pages) <hidden>
Date: 2016-02-26 20:35:16

Possibly related (same subject, not in this thread)

Hi Keith,

On 02/26/2016 08:52 PM, Keith Thompson wrote:
On Fri, Feb 26, 2016 at 7:46 AM, Michael Kerrisk (man-pages)
[off-list ref] wrote:
quoted
On 02/24/2016 10:26 AM, Martin Gebert wrote:
quoted
In the example section of the page the following snippet is given:

--8><--
        void
        myfunc3(void)
        {
            int j, nptrs;
        #define SIZE 100
            void *buffer[100];
            char **strings;

            nptrs = backtrace(buffer, SIZE);
--><8--

Problems:

 1. "#define SIZE 100" is not indented correctly.
 2. SIZE should also be used for the buffer array size.
Thanks, Martin. Fixed as below.

Cheers,

Michael
diff --git a/man3/backtrace.3 b/man3/backtrace.3
index afca93d..064b970 100644
--- a/man3/backtrace.3
+++ b/man3/backtrace.3
@@ -215,8 +215,8 @@ void
 myfunc3(void)
 {
     int j, nptrs;
-#define SIZE 100
-    void *buffer[100];
+    const int SIZE = 100;
+    void *buffer[SIZE];
     char **strings;

     nptrs = backtrace(buffer, SIZE);
I suggest leaving it as it was, apart from using SIZE in the definition
of buffer.

It's common for preprocessor directives to be left-justified rather
than aligned with the surrounding code.  (They mostly appear at file
scope, so it's not usually an issue.)  It's perfectly valid to indent
the #define, but it's a bit misleading, since it implies that SIZE has
a scope (it doesn't, it's visible to the end of the translation unit).

With the "const int" declaration, buffer becomes a VLA (variable
length array).  VLAs don't exist in C90, do exist in C99, and are
optional in C11.  
Ahhh -- I was not aware of the C11 detail.
The code won't compile with "gcc -pedantic-errors".
Which gcc versions do that? I do not see such an error from gcc 5.3.

Cheers,

Michael




-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help