技巧和窍门–C语言中应避免的8个保留字

仅仅因为程序员以他们选择的语言提供了一项功能,并不意味着他们应该使用它!当涉及到使用C开发嵌入式软件时,尤其如此。尽管C为开发人员提供了许多不可或缺的工具,但该语言中内置了8个关键字,应完全避免使用这些关键字或仅将它们用作最后​​的手段。让我们简要地探讨这些保留的关键字,并了解为什么我们应尽量减少使用它们。

数字地球仪

保留关键字1 –自动

auto关键字是一个存储类说明符,它告诉编译器所定义变量的存储持续时间(范围)。只能在函数内使用此关键字,以声明在函数内创建并在函数完成后销毁的变量。由于这在ANSI-C中默认发生在函数中的局部变量中,因此使用此关键字毫无用处!使用它只会使开发人员感到困惑,因此应避免使用。

保留的关键字2 –中断

break关键字最常在switch块的case语句中使用。这是break语句的完全有效和最佳用法!不幸的是,break也可以用来过早退出循环。这可以有效地使用break,但是如果循环变得嵌套和复杂,则存在危险。问题是,使用break可能会导致break的意外后果,并且不执行原本可以运行的代码。基本上,这种情况下的中断操作是绕过循环的原始终止表达式。因此,建议仅使用带有switch / case语句的break并在循环内使用其他构造来获得所需的行为。

保留的关键字3 –继续

continue关键字具有与break和goto语句相同的污名,因为它破坏了代码流,并可能使程序员感到困惑。修改代码的困惑程序员通常会不小心添加错误!通过强制执行控制直接进入循环的测试条件,continue语句绕过了循环的正常执行。继续使用的唯一有用的地方是发生错误并且程序员希望重新启动语句序列。

保留关键字4 – extern

由于默认情况下C语言中的所有内容都是隐式extern,因此extern关键字臭名昭著地需要很少的介绍! extern的问题在于,它使一切都变得全球化!这只是不好的编程习惯,因为它使每个函数和变量都可以看到其他所有人,这不仅会导致重入问题,而且还会使无关的函数意外地修改数据。应尽量减少使用extern,并定义变量以使其具有最小的范围和做法,例如尽可能采用封装。

保留关键字5 –转到

goto关键字是许多电气工程师转为软件工程师的最爱。在功能编程时代,主要的控制结构是goto关键字。此关键字允许程序执行跳到程序内的指定标签。 goto的问题在于,它的使用通常会创建不可读的意大利面条代码!函数和其他流控制语句的使用可以使软件实现更好。虽然通常建议永远不要使用goto,但可能有意义的唯一实际位置是在函数范围内的错误处理程序中使用。陪审团仍然没有解决!

保留关键字6 –内联

inline关键字实际上非常酷。您可以将其添加到函数的前面(前提是您使用的是C99编译器),而不是将该函数在已编译的代码中称为函数,而是将函数的内容粘贴到位!这意味着不必花时间去调用一个函数,就像在这里编写了函数代码一样!这有两个主要问题。首先是由编译器决定是否实际内联代码!将关键字放在函数的前面并不能保证编译器会听从开发人员的建议。其次,如果在整个代码中大量使用该函数的情况下,如果编译器确实内联了该函数,则编译后代码的大小可能会失控!

保留关键字7– register

register关键字是开发人员应避免的另一个存储类说明符。该关键字旨在向编译器建议应通过使用一个CPU寄存器来使该对象快速可用。关键字的一个问题是,一旦获得该关键字,将取决于编译器是否遵守建议或将其与其他自动变量一起存储在堆栈中。如今,编译器非常聪明,并且知道存储对象和数据的最佳位置,因此最好让编译器决定,而不是再次使可能正在阅读代码并做出错误假设的开发人员感到困惑。

保留关键字8– restrict

strict关键字是一种类型限定符,仅适用于指针。它是在C99中引入的,它允许编译器对代码执行优化,前提是所指向的对象只能通过受限指针访问。不建议使用限制剂,因为它可能会产生意想不到的副作用。

 

这些只是C语言中这些经常引起争议的关键字的一些想法。您还有其他想法或例子吗?

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.