当我运行这段代码时,我得到一个错误,"参数名称省略",我怀疑它是因为我使用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);
}
答案 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);