Я хочу скомпилировать программу из C в WebAssembly. Программа должна взять число, вычислить простые числа до данного числа, а затем вернуть истекшее время (в микросекундах). Для компиляции я использовал Emscripten и получил такую ошибку:
"C: \ Users \ Pawel \ Desktop \ Wasm \ main. c: 20: 1: error: неявное объявление функции calcPrimes 'недопустимо в C99
[-Werror, -Wimplicit-function-декларация]
calcPrimes (number);
^
сгенерирована 1 ошибка.
em cc: error:' C: / Users / Pawel / Desktop / emsdk / emsdk / upstream / bin \ clang.exe -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major __ = 1 -D__EMSCRIPTEN_minor __ = 39 -D__EMSCRIPTEN_minor __ = 39 -D__EMSCRIPTEN_Tiny __ = 15 -D_ 2 -D_Tiny __ = 15 -D_ D __ unix -D__unix__ -Werror = неявное объявление-функции -Xclang -nostdsystemin c -Xclang -isystem C: \ Users \ Pawel \ Desktop \ emsdk \ emsdk \ upstream \ emscripten \ system \ include \ compat - Xclang -isystem C: \ Users \ Pawel \ Desktop \ emsdk \ emsdk \ upstream \ emscripten \ system \ include -Xclang -isystem C: \ Users \ Pawel \ Desktop \ emsdk \ emsdk \ upstream \ emscripten \ system \ включить \ lib c -Xclang -isystem C: \ Users \ Pawel \ Desktop \ emsdk \ emsdk \ upstream \ emscripten \ system \ lib \ li bc \ musl \ arch \ emscripten -Xclang -isystem C: \ Users \ Pawel \ Desktop \ emsdk \ emsdk \ upstream \ emscripten \ system \ local \ include -Xclang -isystem C: \ Users \ Pawel.emscripten_cache \ wasm \ include -DEMSCRIPTEN -fignore-exceptions C: \ Users \ Pawel \ Desktop \ Wasm \ main. c -Xclang -isystem C: \ Users \ Pawel \ Desktop \ emsdk \ emsdk \ upstream \ emscripten \ system \ include \ SDL - c -o C: \ Users \ Pawel \ AppData \ Local \ Temp \ emscripten_temp_nqmlki_g \ main_0.o -mllvm -combiner-global-alias-analysis = false -mllvm -enable-emscripten- sjlj -mllvm -disable-lsr 'failed (1) "
Заранее благодарим за любую помощь!
Мой код:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <emscripten.h>
EMSCRIPTEN_KEEPALIVE
long getDuration(int number){
struct timespec ts;
struct timespec {
time_t tv_sec;
long tv_nsec;
};
timespec_get(&ts, TIME_UTC);
long startsc = ts.tv_sec;
long startns = ts.tv_nsec;
calcPrimes(number);
timespec_get(&ts, TIME_UTC);
long endsc = ts.tv_sec;
long endns = ts.tv_nsec;
long resus = (endsc - startsc) * 1000000 + (endns/1000) - (startns/1000);
return resus;
}
int isPrime(int num) {
int i;
if(num == 2) return 1;
if(num % 2 == 0) return 0;
int sq = (int) sqrt(num) + 1;
for(i = 3; i < sq; i = i + 2) if(num % i == 0) return 0;
return 1;
}
int calcPrimes(int n) {
int i, count = 0;
for(i = 2; i <= n; i++) if(isPrime(i)) count++;
return count;
}