Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在函数中使用printf返回void_C_Function_Declaration_Definition - Fatal编程技术网

C 在函数中使用printf返回void

C 在函数中使用printf返回void,c,function,declaration,definition,C,Function,Declaration,Definition,当我运行这段代码时,我得到一个错误,上面写着“parametername省略”,我怀疑这是因为我使用的printf在void返回函数中返回int-type *注意:我写这段代码是为了检查指针是否会成功更改全局变量的值 #include <stdio.h> int a = 5 ; void call(int) { printf("%d\n",a); } int main() { int* p = &a; call(a); *p = 6

当我运行这段代码时,我得到一个错误,上面写着“parametername省略”,我怀疑这是因为我使用的printf在void返回函数中返回int-type

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

#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); 
}
#包括
INTA=5;
无效呼叫(int)
{
printf(“%d\n”,a);
}
int main()
{
int*p=&a;
电话(a);
*p=6;
printf(“%d\n”,a);
printf(“%d\n”,*p);
电话(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(); 
}
#包括
INTA=5;
无效调用()
{
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()
{
    printf("%d\n",a); 
}
void call( void )
{
    printf("%d\n",a); 
}

int a = 5 ; 
在这种情况下,必须调用如下函数

call();
void call( int a )
{
    printf("%d\n",a); 
}
函数将依赖全局变量
a

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

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

int a = 5 ; 
那么代码将不会编译

因此,如果函数不处理全局变量就更好了。因此,最好将函数定义为

call();
void call( int a )
{
    printf("%d\n",a); 
}
就这样说吧

call(a);

void call(int a){…}为什么要使用全局变量?正如在文章中所说,指针是否会成功地改变全局变量的值?我很有信心你的C语言书展示了函数是如何定义的…如果你打算使用参数,它应该是
void call(int a)