在本节中,我们将了解 C 语言中宏和函数之间的区别。宏是预处理的,这意味着在编译过程中所有宏都将被预处理。函数不是预处理的,而是编译的。宏不进行类型检查,因此对于不同类型的输入可能会出现一些问题。在函数的情况下,则不会发生这种情况。此外,对于宏,如果输入没有正确维护,则可能会生成一些无效的结果。请查看以下程序以了解该问题。示例#include #define SQUARE(x) x ... 阅读更多
C 程序的内存布局如下所示。有几个级别。它们是-堆栈段堆段文本段数据段现在让我们看看这些部分的功能。序号部分和描述1堆栈进程堆栈包含临时数据,例如方法/函数参数、返回地址和局部变量。它是为自动变量和函数参数分配的内存区域。它还在执行函数调用时存储返回地址。堆栈使用 LIFO(后进先出)机制来存储局部或自动变量、函数参数以及存储下一个地址或返回地址。返回地址是指返回 ... 阅读更多
在这里,我们将了解 C 中的结构和 C++ 中的结构的区别。C++ 结构在很大程度上类似于 C++ 中的类。在 C 结构中,所有成员都是公共的,但在 C++ 中,它们默认为私有的。其他一些差异如下所示。C 结构C++ 结构C 中的结构不能在结构内包含成员函数。C++ 中的结构可以包含成员函数和成员变量。我们不能在 C 中直接初始化结构数据。我们可以在 C++ 中直接初始化结构数据。在 C 中,我们必须编写“struct”关键字来声明结构类型变量。在 C++ 中,我们不需要使用“struct” ... 阅读更多
在本节中,我们将了解如何在 C 语言中编写多行宏。我们可以像函数一样编写多行宏,但是对于宏,每一行都必须以反斜杠“\”字符结尾。如果我们使用花括号“{}”并且宏以“}”结尾,则可能会产生一些错误。因此,我们可以将整个内容括在括号中。请查看以下程序以了解多行宏。示例#include #define PRINT(x, str) ({\ printf("The number %d", x);\ printf(" is ");\ printf(#str);\ printf("");\ }) int main() { int x = 10; if(x % 2 == 0){ PRINT(x, EVEN); } }输出The number 10 is EVEN
在这里,我们将了解如果我们使用负数来获取模数,结果会是什么。让我们看看以下程序及其输出以了解。示例#include int main() { int a = 7, b = -10, c = 2; printf("Result: %d", a % b / c); }输出Result: 3这里 % 和 / 的优先级相同。所以 % 首先工作,所以 a % b 生成 7,现在除以 c 后,它生成 3。这里对于 a % b,左操作数的符号附加到 ... 阅读更多