对于编程和c++的世界,我绝对是个初学者。我开始阅读一本名为c++ primer的书,我在其中一个练习中遇到了一个问题:“这个代码合法吗?”作为一个初学者,我个人对这意味着什么或指的是什么一无所知。请引导一位需要帮助的卑微的新手!
发布于 2021-09-07 03:58:16
在这种情况下,“法律”的通俗意思是“形式良好”和“不是未定义的”。
让我们从一个类比开始。英语是有规则的。如果我用英语写给你:"äöldksfg",你不会理解我,因为这不是一个格式良好的单词。如果我写"if if",你可以理解每个单词,但它仍然不是一个结构良好的句子。如果我写了“树马哼唱着亵渎神明”,你会认出它的句子结构,因为它格式很好,但它对你来说可能仍然没有什么意义。
与英语一样,C++语言也有自己的规则。编程语言的规则比人类语言严格得多。在C++标准文档中编写了C++语言的规则。作为一份充满规则的文件,它类似于一本法律书。遵守法律书使您的行为合法,按照类比,符合C++语言的规则使您的程序也“合法”。
发布于 2021-09-07 03:31:34
标准(参见Where do I find the current C or C++ standard documents?)中描述了编写C++代码的规则
如果一段代码符合标准的每一条规则,那么它就是合法代码。
第一步是代码必须符合标准所描述的语言语法。例如:
int x = +/-;
int x =
是非法语句的示例,即非法语法。你的编译器会为你找到这样的错误。
但它远比这复杂得多。事实是,您可以编写符合语言语法的代码,但仍然是非法的。
一个简单的例子:
int* x;
void foo(void)
{
int n = 42;
x = &n;
}
void bar(void)
{
foo();
printf("%d\n", *x); // Illegal - using pointer to "dead" object
}
当你深入研究C++时,你会发现有很多种方法可以用合法的语法编写代码,但却有非法的/未定义的行为。
https://stackoverflow.com/questions/69087196
复制