我刚在mac上安装了gmp Multiple Precision Arithmetic Library。每当我编译程序时,我都会收到此警告:
warning: implicit declaration of function '__gmpz_out_str' is
invalid in C99 [-Wimplicit-function-declaration]
mpz_out_str(stdout,10,p);
/usr/local/include/gmp.h:951:21: note: expanded from macro 'mpz_out_str'
#define mpz_out_str __gmpz_out_str
我将获得一个可行的可执行文件,但是当我使用这个特定的函数时,我总是得到它。这是主文件的样子:
#include <gmp.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void fact(int n){
int i;
mpz_t p;
mpz_init_set_ui(p,1); /* p = 1 */
for (i=1; i <= n ; ++i){
mpz_mul_ui(p,p,i); /* p = p * i */
}
printf ("%d! = ", n);
mpz_out_str(stdout,10,p);
mpz_clear(p);
}
int main(int argc, char * argv[]){
int n;
if (argc <= 1){
printf ("Usage: %s <number> \n", argv[0]);
return 2;
}
n = atoi(argv[1]);
assert( n >= 0);
fact(n);
return 1;
}
任何人都知道这是什么问题?
答案 0 :(得分:2)
5.12输入和输出功能
从stdio流执行输入的函数,以及输出到
mpz
个数字的stdio流的函数。将流参数的NULL
指针传递给任何这些函数将使它们从stdin
读取并分别写入stdout
。使用任何这些函数时,最好在
stdio.h
之前加入gmp.h
,因为这样可以gmp.h
为这些函数定义原型。
如果您从
更改文件顶部#include <gmp.h>
#include <stdio.h>
到
#include <stdio.h>
#include <gmp.h>
然后错误消息就会消失。