C中的可见性

时间:2018-02-12 05:47:00

标签: c

如果我有一个功能:

void G(int f){

    printf("Hello");

}

(我知道这个函数没有意义的参数,但我只是为了这个问题)

“int f”是否在函数内部可见,即使它没有定义且未在其中使用?

2 个答案:

答案 0 :(得分:5)

  

即使它没有定义

不太对劲。它实际上确实有一个定义,它就在函数声明中。无论你是否使用,这都是完全不同的事情。

尽管如此,你所使用的术语,可见性,对于初学者来说是可以的,但语言规范(以及像我这样使用它的语言律师)更喜欢术语范围。

变量范围包含在(对于C11)6.2.1 Scopes of identifiers中。该部分的Stanza /4说明了(我的重点):

  

如果声明标识符的声明符或类型说明符出现在块 内或函数定义中的参数声明列表中,则标识符具有块作用域,该作用域终止于   相关块。

这意味着变量是"可见"一直到功能块的结尾(假设你不通过在内部范围中引入另一个同名的变量来遮蔽它)。

答案 1 :(得分:1)

  

“int f”是否在函数内部可见,即使它没有定义且未在其中使用?

根据您的逻辑int f,如果可以使用它,只有在使用之前可以使用它...

简而言之,可见性与未使用变量的事实无关。它是可见的,因为它是作为参数发送的。