関数プロトタイプについてはよく知っていますが、このエラーは関数宣言エラーのようです。つまり、なぜこの警告が表示され、エラーが発生するのか、本当に困惑しています。
gcc が私の関数プロトタイプを完全に無視しているようなものです。これはコンパイラのバグですか?
簡潔にするために、この関数を別のヘッダー ファイルで宣言しませんでしたが、違いはありません。
gcc 出力:
$ gcc -Wall -std=c99 -pedantic primefactors.c
primefactors.c: In function ‘main’:
primefactors.c:8:5: warning: implicit declaration of function ‘largestprime’ [-Wimplicit-function-declaration]
primefactors.c: At top level:
primefactors.c:12:6: error: conflicting types for ‘largestprime’
primefactors.c:8:20: note: previous implicit declaration of ‘largestprime’ was here
コード:
#include <stdio.h>
#include <math.h>
long largetsprime(long);
int main()
{
printf("%d\n", largestprime(600851475143));
return 0;
}
long largestprime(long num)
{
int highest;
int mid = sqrt(num);
for (int i = 2; i < mid; i++) {
if (mid % i == 0) {
if (i % 1 == 0 && i % i == 0)
highest = i;
}
}
return highest;
}