在函数中使用printf返回void

时间:2016-11-20 13:30:31

标签: c function declaration definition

当我运行这段代码时,我得到一个错误,"参数名称省略",我怀疑它是因为我使用printf在void返回函数中返回int类型。 / p>

*注意:我正在编写此代码以检查指针是否成功更改全局变量的值?

#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); 
}

2 个答案:

答案 0 :(得分:1)

它不是printf,它是你打电话的方式&#34;打电话&#34;。

如果你不需要在通话中使用参数,那么它应该是

#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(); 
}

答案 1 :(得分:0)

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

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

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

实际上该函数不使用其参数。所以你可以这样定义它(C中的一个更好的定义)

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

或者像这样

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

在这种情况下,您必须调用类似

的功能
call();

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

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

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

int a = 5 ; 

然后代码将无法编译。

因此,如果函数不处理全局变量会更好。所以定义像

这样的函数会更好
void call( int a )
{
    printf("%d\n",a); 
}

并将其称为

call(a);