简体   繁体   中英

Issue with math.h

I am getting a really weird issue with my code. I tried using clang and gcc, both tell me the same thing

init_twiddle.c:12:10: warning: implicitly declaring library function 'cosf' with type 'float (float)' [-Wimplicit-function-declaration]
          .re = cosf(primitive_root*i) ,
                ^
init_twiddle.c:12:10: note: include the header <math.h> or explicitly provide a declaration for 'cosf'
init_twiddle.c:13:10: warning: implicitly declaring library function 'sinf' with type 'float (float)' [-Wimplicit-function-declaration]
          .im = sinf(primitive_root*i)
                ^
init_twiddle.c:13:10: note: include the header <math.h> or explicitly provide a declaration for 'sinf'
2 warnings generated.

The code:

// file: init_twiddle.c

#include "complex.h"
#include <math.h>

void init_twiddle1024(Complex__complex* twiddle) {
  int i,span ;
  // Init the twiddles
  for(span=1;span<=512;span<<=1) {
    float primitive_root = -Complex__pi/span ;
    for(i=0;i<span;i++) {
      Complex__complex t =
    {
     .re = cosf(primitive_root*i) ,
     .im = sinf(primitive_root*i)
    } ;
      twiddle[span+i] = t ;
    }
  }
}
// file: complex.h

#ifndef COMPLEX_H
#define COMPLEX_H

#include "stdbool.h"
#include "assert.h"
//#include "pervasives.h"
typedef struct Complex__complex {
  float re;
  float im;
} Complex__complex;

static const float Complex__pi = 3.141593;

#endif // COMPLEX_H

The command I use to compile:

gcc -I. -I$(heptc -where)/c/ -std=c99 -c init_twiddle.c

I am working on a project with some strange programming language which explain all the included directories.

Does someone have any idea of why I am getting those errors?

PS: note that it's not a linker issue but an issue at compile time. It also does not seem to appear when I manually write the content of complex.h into the file

It turned out Barmar was right. I was including a directory where a math.h already exists, thus leading to not including the libc one. The faulty one was -I$(heptc -where)/c/ for those who would have the same issue with the Heptagon langage. Thanks for your help.

As commented by @Barmar, the issue is that in $(heptc -where)/c/ there is already a math.h header defined which don't implement the function you want to use in this exemple.

Considering it's to compile with Heptagon I would advise to copy the only file that is really useful in this case from $(heptc -where)/c/ which is pervasives.h where you have your init_twiddle.c and since you are compiling with -I. it will then compile perfectly fine.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM