https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119438

            Bug ID: 119438
           Summary: More descriptive warning desired: '#' is not followed
                    by a macro parameter
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nightstrike at gmail dot com
  Target Milestone: ---

```
a.c:
#define F(A) \
  f(#notA)

$ gcc -c a.c
a.c:1:12: error: '#' is not followed by a macro parameter
    1 | #define F(A) \
      |            ^
Compiler returned: 1
```

This would ideally tell me at a minimum which parameter is misused, something
like "notA is not a valid macro parameter".  Ideally, though, it would point to
the exact problem location.  I spent a bit of time tracking this down in more
complicated legacy environment with giant function-like macros, and it was
pretty confusing.

I guess this is mostly hampered due to the use of a multi-line macro, but the
following isn't much better:

```
a.c:1:12: error: '#' is not followed by a macro parameter
    1 | #define F(A) f(#notA)
      |            ^
Compiler returned: 1
```

You can imagine that this doesn't scale too well.  It's easy to spot the
problem here, but not with a large macro with half a dozen arguments.

And yes, I admit that the best answer is, don't use complex macros.  But,
legacy code and all...

Reply via email to