C11对于内联函数的写法严格吗?

问题描述 投票:0回答:1

这个问题主要是措辞问题。 对于内联函数内联定义,C11对它们的描述如下:

6.7.4第6页:

使用 inline 函数说明符声明的函数是 inline 功能.

和:

6.7.4 p7:

任何具有 内部链接的函数都可以是 内联函数。对于一个 具有外部链接的功能,则适用以下限制:如果 函数是用 inline 函数说明符声明的,那么它应该 也可以在同一个翻译单元中定义。如果所有文件范围 翻译单元中函数的声明包括 inline 没有 extern 的函数说明符,则其中的定义 翻译单元是一个内联定义

首先,对于“任何具有内部链接的函数都可以是内联函数”这句话, 坦白说,我觉得这句话是正确的,但却是多余的。因为根据内联函数的定义,只要出现“inline”,那么该函数就是一个内联函数 .

继续阅读。

结合前文,我对后文的理解是,如果打破了标准中提到的限制,那么具有外部链接的函数就不会是内联函数

显然这是不正确的。因为一个函数是否是内联函数与其链接无关。 6.7.4 p10中的一句话也很好地证明了这一点:

声明具有外部链接的内联函数可能会导致 在外部定义或可供使用的定义中 仅在翻译单元内。 使用 extern 的文件范围声明 创建外部定义。下面的例子展示了一个完整的 翻译单位。···

“只能在翻译单元内使用的定义”,(1)我认为这个定义指的是内联定义

那么这句话的粗体部分表示内联函数可以有内联定义外部定义

所以,(2)对于第 6.7.4 p7 部分,我想标准应该想说:

任何具有 内部链接内联函数都有一个内联定义。 对于具有 外部链接的内联函数,...

我的问题是,我对标有(1)和(2)的地方的理解有错误吗?\

这可能是一个毫无意义且无聊的问题。但仍然感谢您的阅读。

c c11
1个回答
0
投票

我对下面文字的理解是,如果打破了标准中提到的限制,那么具有外部链接的函数将不是内联函数。

你的理解是错误的。它并不是说“如果你违反了限制,那么……”。它的意思是“你不能违反这些限制”。违反这些限制的程序不是有效的 C 程序

© www.soinside.com 2019 - 2024. All rights reserved.