C99, «Несмотря на название, не-директива является директивой предварительной обработки». - PullRequest
6 голосов
/ 15 апреля 2011

Что означает цитируемая сноска в заголовке?Это сноска, прикрепленная к 6.10.3p11

Если в списке аргументов есть последовательности токенов предварительной обработки, которые в противном случае действовали бы как директивы предварительной обработки, 147) поведение не определено.

Я проверил и обнаружил

Директива предварительной обработки состоит из последовательности токенов предварительной обработки, которая начинается с # токена предварительной обработки, который ...

и я не нашел нетерминал non-directive, соответствующий этому синтаксису.Он может, но не обязательно, начинаться с токена предварительной обработки #.Так разве мы не должны сказать следующее?

"Несмотря на название, директива предварительной обработки не является директивой."

Кроме того, какова цельэтой сноски?

Ответы [ 2 ]

7 голосов
/ 15 апреля 2011

См. http://www.open -std.org / jtc1 / sc22 / wg14 / www / docs / dr_250.htm Следует пояснить, что

#define nothing(x) // Nothing    /* Case 1 */
nothing (
#nonstandard
)

- это UB.

4 голосов
/ 15 апреля 2011

Моя копия C99 не имеет этой сноски (это оригинал - у вас есть одна с примененными исправлениями TR?), Но я думаю, что идея в том, что если у вас есть

# non-directive

внутри макросасписок аргументов, это все еще неопределенное поведение.

Было бы лучше сделать <<em> не-директиву > включающей в себя #, я думаю, это упростило бы 6.10p3,4а также устранение этой путаницы.

...