On 2022-07-11 21:57:45 +0800, Ziyao wrote:
> The simpliest example is like below:
>
> #if 0
> "
> #if 0
> "
> #endif
> #endif
Going back to this example, even if GCC doesn't give an error,
consider a slight variation:
#if 0
R"-(
#if 0
)-"
#endif
#endif
This time, one gets an error with gcc (default GNU dialect or C++):
err.c:6:2: error: #endif without #if
6 | #endif
| ^~~~~
And the following code
#if 0
R"-(
#if 0
)-"
#endif
does not give any warning or error (the behavior is different
if one provides an option like -std=c99 to follow ISO C99).
This is due to the use of a "raw string literal", specified
by C++11 (and this can also be regarded as a C extension),
which allows newline characters.
This shows that you cannot ignore parsing in a skipped block.
--
Vincent Lefèvre <[email protected]> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel