2016-10-19 11 views
0

を返します。いくつかのフラグを付けてコピープログラムを作っています。私はコピーした後に小胞を切り捨てる必要があります。 これはそれのためのコードである:GCCは私の学校プロジェクトでエラーの '暗黙の宣言関数' truncate ''

int a_trunc(const char* infile, const char* size){ 
    int s = strtol(size, NULL, 10); 
    truncate(infile, s); 
    return 0; 
} 

GCCはエラーを返す:「関数の暗黙の宣言は 『』」切り捨てます。

私はsys/types.hとunistd.hを持っています。

私はフラグでコンパイルしています:お時間を -std = c99を-Wall -Werror

感謝を。

+0

フラグ-std = gnu99でコンパイルを試したことがありますか? –

+1

また、-std = c99 -D_GNU_SOURCEで試してください –

+2

"GNUモード" '-std = gnu90'(GCCバージョン5までのデフォルト設定)で動作するGCCコンパイラは標準ライブラリ内のすべての形式の非標準ジャンクをダンプします。これはC標準では許可されていないため、標準Cとしてコードをコンパイルするように指示すると、非標準の迷惑メールが削除されます。可能であれば、このケースではあまりにも多くのビットを削除します。 POSIXはここで標準Cと衝突する傾向がありますが、なぜそうかもしれません。 – Lundin

答えて

-1

truncate()は、使用しようとする前にプロトタイプで宣言されていないため、この問題が発生しています。 the man pageパー

SYNOPSIS

#include <unistd.h> 
    #include <sys/types.h> 

    int truncate(const char *path, off_t length); 
    int ftruncate(int fd, off_t length); 

あなたは#includeunistd.hsys/types.hの両方に必要ですが、それは十分ではありません。それらを得るための一つの方法になり-std=c99を使用して

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

truncate(): 
     _XOPEN_SOURCE >= 500 
      || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L 
      || /* Glibc versions <= 2.19: */ _BSD_SOURCE 

    ftruncate(): 
     _XOPEN_SOURCE >= 500 
      || /* Since glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L 
      || /* Glibc versions <= 2.19: */ _BSD_SOURCE 

:GCC/Linuxはまた、特定の機能マクロ定義が必要です。

+0

私は言ったように、私はそれらの両方が含まれています。そしてなぜ私は両方の.hファイルが含まれている場合、私はプロトタイプを宣言しなければならないのですか?そのプログラム内の他のすべての機能が動作します。切り詰めるだけでこのエラーが発生します。 – Erik

+0

それはうまくいったのですが、どうしていいのか分かりません...とにかくたくさんあります。 – Erik

+1

@Erikあなたのコードをすべて投稿してください。なぜか分かりません。 –

関連する問題