And*_*rew 3 c warnings compilation gmp
我刚刚在我的 Mac 上安装了 gmp 多精度算术库。每当我编译程序时,我都会收到此警告:
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
Run Code Online (Sandbox Code Playgroud)
我将得到一个可以工作的可执行文件,但是当我使用这个特定的函数时我总是得到这个。主文件如下所示:
#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;
}
Run Code Online (Sandbox Code Playgroud)
有人知道问题是什么吗?
来自GMP 文件:
5.12 输入输出功能
执行来自 stdio 流的输入的函数以及输出到 stdio 流的
mpz数字的函数。将NULL流参数的指针传递给任何这些函数将使它们分别读取stdin和写入stdout。使用任何这些函数时,最好包含
stdio.hbeforegmp.h,因为这样可以gmp.h为这些函数定义原型。
如果您将文件的顶部更改为
#include <gmp.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
到
#include <stdio.h>
#include <gmp.h>
Run Code Online (Sandbox Code Playgroud)
那么错误消息就会消失。