C 静态内联函数的标识?

C 静态内联函数的标识?,c,static,inline-functions,C,Static,Inline Functions,C静态内联函数在运行时是否具有标识 我是否应该关心该构造的命名冲突 如果函数是在.c文件中定义的?是否相同?内联函数的命名与非内联函数的命名一样重要。编译器使用该名称来标识要调用的函数。程序员阅读代码时也会使用它来理解函数的功能 在运行时,函数的名称不相关 还要注意,inline关键字只是对编译器的提示。尽管使用了inline关键字,但函数可能实际上没有内联。类似地,未标记为内联的函数可能仍然由编译器内联。内联函数的命名与非内联函数的命名一样重要。编译器使用该名称来标识要调用的函数。程序员阅读代

C静态内联函数在运行时是否具有标识

我是否应该关心该构造的命名冲突


如果函数是在.c文件中定义的?是否相同?

内联函数的命名与非内联函数的命名一样重要。编译器使用该名称来标识要调用的函数。程序员阅读代码时也会使用它来理解函数的功能

在运行时,函数的名称不相关


还要注意,inline关键字只是对编译器的提示。尽管使用了inline关键字,但函数可能实际上没有内联。类似地,未标记为内联的函数可能仍然由编译器内联。

内联函数的命名与非内联函数的命名一样重要。编译器使用该名称来标识要调用的函数。程序员阅读代码时也会使用它来理解函数的功能

在运行时,函数的名称不相关


还要注意,inline关键字只是对编译器的提示。尽管使用了inline关键字,但函数可能实际上没有内联。类似地,未标记为内联的函数可能仍由编译器内联。

您可能不关心内联函数的命名冲突,但我保证编译器会

内联是编译过程中的后期操作-编译器首先需要确定程序的调用结构,该结构要求编译器正确解析所有命名调用

在运行时,如果不显式地编写一些魔术来确定当前正在执行的函数的名称,您就无法知道它的名称-c不是反射的


正如Mark指出的那样,内联关键字只是一个提示——如果编译器决定通过显式调用获得更好的性能,那么它可以随意忽略它。

您可能不关心内联函数的命名冲突,但我保证编译器会

内联是编译过程中的后期操作-编译器首先需要确定程序的调用结构,该结构要求编译器正确解析所有命名调用

在运行时,如果不显式地编写一些魔术来确定当前正在执行的函数的名称,您就无法知道它的名称-c不是反射的

正如Mark指出的那样,inline关键字只是一个提示——如果编译器决定通过显式调用获得更好的性能,那么它可以随意忽略它。

C静态内联函数在运行时是否具有标识

如果编译器至少有一次选择不内联静态内联函数,或者如果您获取函数的地址,则静态内联函数在编译单元中具有标识

获取的地址仅在当前编译单元.c文件中有效。在另一个编译单元的另一个.c文件中,编译器将为您提供不同的地址

与编译器可以看到其主体的任何其他函数一样,该函数中的代码可以在编译器生成的汇编代码中的不同位置完全或部分复制

静态内联函数作为任何静态函数在当前编译的.c文件之外的任何其他.c文件中都不可见

我是否应该关心该构造的命名冲突

仅当您获取头文件中定义的静态内联函数的地址并执行以下操作时:

静态内联函数f在文件a.h中定义 a、 h包含在C文件x.C和y.C中 x、 c获取f的地址并将其存储到全局变量f_addr中 y、 c获取f的地址,并将其与存储在f_addr中的值进行身份比较 比较的结果将是错误的,尽管在不同的抽象层次上,它是非常相同的函数f 如果函数是在.c文件中定义的?是一样的吗

从C编译器的角度来看,这与在头文件中定义函数并在.C文件中包含头文件完全相同。编译器不知道头文件,它只看到一个连续编译单元。头文件是一个存在于使用C语言的程序员头脑中的概念——从C编译器的角度来看,这个概念并不存在。

C静态内联函数在运行时是否具有标识

如果编译器至少有一次选择不内联静态内联函数,或者如果您获取函数的地址,则静态内联函数在编译单元中具有标识

获取的地址仅在当前编译单元.c文件中有效。在另一个编译单元的另一个.c文件中,编译器将为您提供不同的地址

与编译器可以看到其主体的任何其他函数一样,该函数中的代码可以在编译器生成的汇编代码中的不同位置完全或部分复制

静态内联函数作为任何静态函数都不可见 从当前编译的.c文件以外的任何其他.c文件中删除

我是否应该关心该构造的命名冲突

仅当您获取头文件中定义的静态内联函数的地址并执行以下操作时:

静态内联函数f在文件a.h中定义 a、 h包含在C文件x.C和y.C中 x、 c获取f的地址并将其存储到全局变量f_addr中 y、 c获取f的地址,并将其与存储在f_addr中的值进行身份比较 比较的结果将是错误的,尽管在不同的抽象层次上,它是非常相同的函数f 如果函数是在.c文件中定义的?是一样的吗

从C编译器的角度来看,这与在头文件中定义函数并在.C文件中包含头文件完全相同。编译器不知道头文件,它只看到一个连续编译单元。头文件是一个存在于使用C语言的程序员头脑中的概念——从C编译器的角度来看,这个概念并不存在