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