5

我无法正确理解它们在以下文章中的含义:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1566.htm

有趣的是,C89 明确地只允许标题中的字母和包含文件名。C++ 加了下划线,C99 加了数字。可能这两个标准都应该允许两者。

我在所有 C 和 C++ 标准中发现了以下语句:

ISO/IEC 9899:1990

6.1.7 Header names

Syntax
1 header-name:
< h-char-sequence >
" q-char-sequence "
h-char-sequence:
h-char
h-char-sequence h-char
h-char:
any member of the source character set except
the new-line character and >
q-char-sequence:
q-char
q-char-sequence q-char
q-char:
any member of the source character set except
the new-line character and "

ISO/IEC 9899:1990

5.2.1 Character sets

...

Both the basic source and basic execution character sets shall have the following
members: the 26 uppercase letters of the Latin alphabet

A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z

the 26 lowercase letters of the Latin alphabet

a b c d e f g h i j k l m
n o p q r s t u v w x y z

the 10 decimal digits

0 1 2 3 4 5 6 7 8 9

the following 29 graphic characters

! " # % & ' ( ) * + , — . / :
; < = > ? [ \ ] ^ _ { | } ~

例如,即使在 C89 / C90 中,我也能看到下划线和数字。

4

1 回答 1

3

它指的是这个:

在定界序列和外部源文件名之间应该有一个实现定义的映射。实现应为由一个或多个字母(如 $2.2.1 中定义)后跟句点 (.) 和单个字母组成的序列提供唯一映射。该实现可以忽略字母大小写的区别,并将映射限制为句点前的六个有效字符。

(C89)

这是 C99 版本:

实现应为由一个或多个字母或数字(如 5.2.1 中定义)后跟句点 (.) 和单个字母组成的序列提供唯一映射。第一个字符应为字母。该实现可能会忽略字母大小写的区别,并将映射限制为句点前的八个有效字符。

于 2013-03-31T16:41:46.510 回答