我是计算机科学专业的学生,我们的教授最近就C基础知识进行了演讲。它的脚本声明"关键词是具有固定含义的词,总是以小写字母书写。"
首先,我知道有_Bool
之类的关键字,因此这个陈述已经存在缺陷。该脚本还包含一系列示例,包括但不限于:
break
case
void
main
&
{
#include
%
这引出了许多问题:
#include
关键字?main
视为特殊的函数名称,它可以归类为关键字吗?而且,如果我想证明关于C的陈述,我在哪里可以找到引用的官方来源?
答案 0 :(得分:3)
有关标准文档的链接,请参阅these two个答案。您通常可以安全地使用免费的草稿版本作为参考,而不是相当昂贵的最终文档。至少对于C ++而言,两者之间的差异(主要是)是次要的编辑细节。
C11标准在6.4.1节中定义了以下关键字:
auto if unsigned
break inline void
case int volatile
char long while
const register _Alignas
continue restrict _Alignof
default return _Atomic
do short _Bool
double signed _Complex
else sizeof _Generic
enum static _Imaginary
extern struct _Noreturn
float switch _Static_assert
for typedef _Thread_local
goto union
没有方便的单一运营商列表,但它们未列为关键字。也没有任何预处理器指令。
C ++ 14标准在2.12节中定义了以下关键字:
alignas continue friend register true
alignof decltype goto reinterpret_cast try
asm default if return typedef
auto delete inline short typeid
bool do int signed typename
break double long sizeof union
case dynamic_cast mutable static unsigned
catch else namespace static_assert using
char enum new static_cast virtual
char16_t explicit noexcept struct void
char32_t export nullptr switch volatile
class extern operator template wchar_t
const false private this while
constexpr float protected thread_local
const_cast for public throw
某些运营商的替代符号也被视为关键字:
and and_eq bitand bitor compl not
not_eq or or_eq xor xor_eq
运算符符号在2.13节中列出,但它们不称为关键字。和C预处理器一样,符号也不是关键字。
严格按照标准的字母你的教授是错的。您问题中列表的摘要列出的不仅仅是关键字。它看起来更像是一个特殊单词和符号列表,具有预定义,作为语言或预处理器中的标记。
当您查看关键字在两个标准中的半显式半定义时,这种解释实际上并不是
C11
保留上述令牌(区分大小写)(在翻译阶段7和8中)以供使用 关键字,不得以其他方式使用。
C ++ 14
表4中显示的标识符保留用作关键字(即,在第7阶段无条件地将它们视为关键字),但属性标记除外。
答案 1 :(得分:2)
关键字是由语言保留的其他合法标识符。
运营商不是关键字。 #include
不是关键字。 main
不是关键字(事实上,您可以使用main
作为变量名称)。
你会引用C规范:
6.4.1关键字
<强>语法强>
keyword :
之一
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
inline
int
long
register
restrict
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
_Bool
_Complex
_Imaginary
<强>语义强>
保留上述令牌(区分大小写)(在翻译阶段7和8中)用作关键字,否则不得使用。 关键字
_Imaginary
保留用于指定虚构类型。
来自ISO / IEC 9899:TC3见http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf