如果我有一个功能:
void G(int f){
printf("Hello");
}
(我知道这个函数没有意义的参数,但我只是为了这个问题)
“int f”是否在函数内部可见,即使它没有定义且未在其中使用?
答案 0 :(得分:5)
即使它没有定义
不太对劲。它实际上确实有一个定义,它就在函数声明中。无论你是否使用,这都是完全不同的事情。
尽管如此,你所使用的术语,可见性,对于初学者来说是可以的,但语言规范(以及像我这样使用它的语言律师)更喜欢术语范围。
变量范围包含在(对于C11)6.2.1 Scopes of identifiers
中。该部分的Stanza /4
说明了(我的重点):
如果声明标识符的声明符或类型说明符出现在块 内或函数定义中的参数声明列表中,则标识符具有块作用域,该作用域终止于 相关块。
这意味着变量是"可见"一直到功能块的结尾(假设你不通过在内部范围中引入另一个同名的变量来遮蔽它)。
答案 1 :(得分:1)
“int f”是否在函数内部可见,即使它没有定义且未在其中使用?
根据您的逻辑int f
,如果可以使用它,但只有在使用之前可以使用它...
简而言之,可见性与未使用变量的事实无关。它是可见的,因为它是作为参数发送的。