C 保留字与标准标识符的区别

C 保留字与标准标识符的区别,c,C,所以我对编程一无所知。我目前学习计算机科学,刚刚读了编程书的前200页,但有一件事我似乎看不出和书中没有明确规定的有什么区别,那就是保留字和标准标识符——我怎么能从代码中看出它们是一个还是另一个 我知道保留字是一些不能更改的字,而标准标识符可以(尽管根据我的书不推荐)。问题是,虽然我的书中说保留字总是纯小写的,比如 (int, void, double, return) 对于标准的识别器来说似乎是一样的 (printf, scanf) 那么,我如何知道它是什么时候,或者我必须学习AN

所以我对编程一无所知。我目前学习计算机科学,刚刚读了编程书的前200页,但有一件事我似乎看不出和书中没有明确规定的有什么区别,那就是保留字和标准标识符——我怎么能从代码中看出它们是一个还是另一个

我知道保留字是一些不能更改的字,而标准标识符可以(尽管根据我的书不推荐)。问题是,虽然我的书中说保留字总是纯小写的,比如

(int, void, double, return)    
对于标准的识别器来说似乎是一样的

(printf, scanf)

那么,我如何知道它是什么时候,或者我必须学习ANSI C中的所有保留字,这是我们正在尝试学习的当前语言(或者我将来可能使用的任何语言),才能知道它是什么时候,你必须学习你所学的每种语言的规则,因为它是不同语言的一个不同领域。关于什么是什么没有普遍的规则

第二,在C语言中,你需要知道关键词列表;这似乎就是你所说的“保留词”。这些都很重要;它们是不变的;它们不能被滥用,因为编译器不会让你这么做。不能将
int
用作变量名;它总是一种类型

第三,C预处理器可以被滥用来劫持任何东西;如果您使用
#define double int
编译,您将得到您应得的,但是没有什么可以阻止您这样做

第四,唯一预定义的变量名是当前函数的名称
\uuuu func\uuuu


第五,诸如
printf()
之类的名称是由标准库定义的,但是标准库必须由使用C编译器的人来实现;询问GNUC库的维护人员。有关标准与编译器编写者之间以及编译器编写者与使用编译器的程序员之间的条约背后的许多想法的讨论,请参阅P J Plauger 1992年的优秀著作。是的,它很旧,现代的标准C库比C90中的标准C库大一些,但是背景信息仍然有效并且非常有用。

首先,您必须学习所学每种语言的规则,因为它是不同语言的一个方面。关于什么是什么没有普遍的规则

第二,在C语言中,你需要知道关键词列表;这似乎就是你所说的“保留词”。这些都很重要;它们是不变的;它们不能被滥用,因为编译器不会让你这么做。不能将
int
用作变量名;它总是一种类型

第三,C预处理器可以被滥用来劫持任何东西;如果您使用
#define double int
编译,您将得到您应得的,但是没有什么可以阻止您这样做

第四,唯一预定义的变量名是当前函数的名称
\uuuu func\uuuu

第五,诸如
printf()
之类的名称是由标准库定义的,但是标准库必须由使用C编译器的人来实现;询问GNUC库的维护人员。有关标准与编译器编写者之间以及编译器编写者与使用编译器的程序员之间的条约背后的许多想法的讨论,请参阅P J Plauger 1992年的优秀著作。是的,它很旧,现代的标准C库比C90的库大一些,但背景信息仍然有效,非常有用。

保留字是该语言语法的一部分。不带int的C不是C,而是其他东西。它们是内置于语言中的,并且不是也不能用这种特定语言在任何地方定义

例如,
如果
是保留关键字。你不能重新定义它,即使可以,用C语言怎么做?不过,您可以在汇编中这样做

您所说的标准库函数是包含在标准库中的普通函数,仅此而已。它们是根据语言的语法定义的。此外,您可以重新定义这些函数,但不建议这样做,因为这可能会导致各种错误和意外行为。然而,写下以下内容是完全正确的:

int puts(const char *msg) {
    printf("This has been monkey-patched!\n");
    return -1;
}
您会收到一条警告,抱怨标准库函数的重新定义,但这段代码无论如何都是有效的

现在,想象一下重新实现
return

unknown_type return(unknown_type stuff) {
    // what to do here???
}
保留字是语言语法的一部分。不带int的C不是C,而是其他东西。它们是内置于语言中的,并且不是也不能用这种特定语言在任何地方定义

例如,
如果
是保留关键字。你不能重新定义它,即使可以,用C语言怎么做?不过,您可以在汇编中这样做

您所说的标准库函数是包含在标准库中的普通函数,仅此而已。它们是根据语言的语法定义的。此外,您可以重新定义这些函数,但不建议这样做,因为这可能会导致各种错误和意外行为。然而,写下以下内容是完全正确的:

int puts(const char *msg) {
    printf("This has been monkey-patched!\n");
    return -1;
}
您会收到一条警告,抱怨标准库函数的重新定义,但这段代码无论如何都是有效的

现在,想象一下重新实现
return

unknown_type return(unknown_type stuff) {
    // what to do here???
}

这种区别没有太多的实际用途。另一方面,“保留字”通常对应于您无论如何都必须学习的基本代码概念。(例如,如果您不知道
return
的作用,您将面临更大的问题!)您可以阅读标准。这一区别