我知道在源文件中声明静电函数是什么意思.我读了一些代码,发现头文件中的静电函数可以在其他文件中调用.

推荐答案

该函数是否在头文件中定义?因此,实际代码直接在函数中给出,如下所示:

static int addTwo(int x)
{
  return x + 2;
}

这只是为许多不同的C文件提供有用功能的一种方式.每个包含头文件的C文件都有自己的定义,可以调用.这当然会浪费内存,而且(在我看来)这是一件非常丑陋的事情,因为在头文件中包含可执行代码通常不是一个好主意.

记住,#include:ing一个头基本上只是将头的内容(以及它包含的任何其他头)粘贴到C文件中,就像编译器看到的那样.编译器永远不知道一个特定的函数定义来自头文件.

UPDATE:在很多情况下,像上面这样做其实是个好主意,我意识到我的答案听起来非常黑白,这有点过于简单化了.例如,建模(或仅使用)intrinsic functions的代码可以像上面那样表示,并带有一个明确的inline关键字:

static inline int addTwo(int *x)
{
  __add_two_superquickly(x);
}

这里,__add_two_superquickly()函数是一个虚构的内部函数,因为我们希望整个函数基本上编译成一条指令,所以我们真的希望它是内联的.尽管如此,上面的操作比使用宏要干净.

当然,直接使用内在函数的优势在于,通过提供替代实现并根据使用的编译器 Select 正确的实现,将其封装在另一个抽象层中,可以在缺少特定内在函数的编译器上构建代码.

C++相关问答推荐

为什么getchar()挂起了,尽管poll()返回了一个好的值?""

了解一些CLIPS原语数据类型

是否有任何情况(特定类型/值),类型双关在所有符合标准的C实现中产生相同的行为?

什么C代码将确定打开的套接字正在使用的网络适配器?

为什么GCC可以调用未定义的函数?

如何调试LD_PRELOAD库中的构造函数?

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

当输入负数时,排序算法存在问题

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

从uint8_t*转换为char*可接受

每次除以或乘以整数都会得到0.0000

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

无法在OpenGL上绘制三角形

在C++中允许使用字符作为宏参数

从C中的函数返回静态字符串是不是一种糟糕的做法?

如何在zOS上编译共享C库

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

发送和接收的消息中的Unix域套接字不匹配

在 C23 之前如何对空指针使用nullptr?

C 中类型说明符的顺序重要吗?