我试图在子程序中写入我的文件时卡住了。
void new_page(float *a, float *b, float *c, int *d){
fprintf(results,"\nPage Totals: %f\t%f\t%f\t%d", *a,*b,*c,*d);
}
我收到警告说
Warning: incompatible implicit declaration of built-in function 'fprinf' [enabled by default]
主fprintf中的“错误:'结果'未声明(首次使用此功能)”
工作得很好,就它所涉及的子程序/功能来说它不会起作用。根据我的理解,它认为结果是未声明的,所以我必须传递文件的名称或位置才能使其有效吗?
答案 0 :(得分:1)
除非results
是全局的,否则它是未定义的。
从它的外观来看,你在main中打开了一个文件(流)results
。如果是这样,它只存在于main的范围内。
将它传递给函数。不建议将其设为全局。
看起来像是:
void new_page(FILE *results, float *a, float *b, float *c, int *d){
fprintf(results,"\nPage Totals: %f\t%f\t%f\t%d", *a,*b,*c,*d);
}
也;如果您将此功能放在单独的文件中main()
,那么,正如您所说的fprintf
一样有效 - 您也必须在该文件中包含stdio.h
。
编辑:听起来你在使用该功能签名和原型等做错了。
作为一个简单的例子(不需要检查fopen等):
#include <stdio.h>
void foo(FILE * fp)
{
fprintf(fp, "HELLO\n");
}
int main(void)
{
FILE *fp;
fp = fopen("blabla", "w");
foo(fp);
fclose(fp);
return 0;
}
也;你说你的编译器没有抱怨。你在使用广泛的警告吗?如果没有,你应该。即GCC:
$ gcc -Wall -Wextra -pedantic -o my_prog my_source.c
我通常还会添加-std=c89
,或者根据需要添加-std=c99
。
然后用valgrind运行它:
$ valgrind ./my_prog
这两个步骤将为您提供许多提示和线索,以防止出现问题。
答案 1 :(得分:1)
要解决fprintf
警告,您需要添加
#include <stdio.h>
靠近源文件的顶部。
results
错误不同;您可以将其设为全局或将其作为参数传递给new_page
函数。
使变量成为全局变量(即,在任何函数之外定义,包括main
)通常是较差的样式,但如果results
是FILE*
,那么您将在整个过程中使用你的计划,让它成为全球性并非没有道理。
答案 2 :(得分:0)
这里有一个以上的解决方案。