在函数中使用 printf returns void

using printf in a function returns void

当我 运行 这段代码时,我收到一条错误消息 "parameter name omitted",我怀疑这是因为我正在使用 printf,其中 returns int type inside a void return 函数。

*注意:我写这段代码是为了检查指针是否会成功更改全局变量的值?

#include <stdio.h>

int a = 5 ; 

void call(int)
{
    printf("%d\n",a); 
}

int main()
{
    int* p = &a; 
    call(a);
    *p = 6 ;
    printf("%d\n",a);
    printf("%d\n",*p);
    call(a); 
}

这不是 printf,这是你调用的方式 "call"。

如果调用时不需要使用参数,应该是

#include <stdio.h>

int a = 5 ; 

void call()
{
    printf("%d\n",a); 
}

int main()
{
    int* p = &a; 
    call();
    *p = 6 ;
    printf("%d\n",a);
    printf("%d\n",*p);
    call(); 
}

编译器似乎将警告视为错误。实际上这个函数定义

void call(int)
{
    printf("%d\n",a); 
}

有效。然而,编译器会警告您虽然函数是用参数调用的,但参数名称被省略了。

确实函数没有使用它的参数。所以你可以像这样定义它(C 中的一个更好的定义)

void call( void )
{
    printf("%d\n",a); 
}

或者像这样

void call()
{
    printf("%d\n",a); 
}

在这种情况下,您必须像

那样调用函数
call();

并且该函数将依赖于全局变量a

考虑到如果你像这样交换函数定义和全局变量的定义

void call( void )
{
    printf("%d\n",a); 
}

int a = 5 ; 

那么代码将无法编译。

所以如果函数不处理全局变量会更好。所以最好将函数定义为

void call( int a )
{
    printf("%d\n",a); 
}

并称其为

call(a);