警告:函数'__gmpz_out_str'的隐式声明在C99中无效

时间:2017-11-09 01:39:29

标签: c compilation warnings gmp

我刚在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;
}

任何人都知道这是什么问题?

1 个答案:

答案 0 :(得分:2)

来自GMP documentation

  

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>

然后错误消息就会消失。