-2

次の単一の C ファイル (main.c と呼ばれる) をコンパイルしようとしています。

#include <stdio.h>

#define __USE_MISC 1
#include <net/if.h>

int main(int argc, char **argv)
{
ifreq id_ifreq;
fprintf(stdout, ">>>>>> OK <<<<<<\n");
}

...「gcc main.c -o main」を使用。次のエラーが表示されます。

main.c: In function ‘main’:
main.c:9:2: error: unknown type name ‘ifreq’

「ifreq」構造定義が「#ifdef __USE_MISC」マクロ内にあることはわかっていますが、そのコード ブロックをアクティブにすることはできません。

どのマクロが定義されているかを確認するために、次のコードを開発しました (「gcc main.c -o main」でコンパイル)。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <net/if.h>

int main(int argc, char **argv)
{

   #ifdef __USE_MISC
       printf("__USE_MISC defined\n");
   #endif
   #ifdef _GNU_SOURCE
       printf("_GNU_SOURCE defined\n");
   #endif

   #ifdef _BSD_SOURCE
       printf("_BSD_SOURCE defined\n");
   #endif

   #ifdef _SVID_SOURCE
       printf("_SVID_SOURCE defined\n");
   #endif

}

その結果、「_GNU_SOURCE」以外はすべて定義されています。ただし、「net/if.h」ファイルに含まれる「ifreq」構造体の定義はまだ使用できません。

誰でも助けることができますか?

4

1 に答える 1

3

キーワードを省略していますstruct(C では、構造体定義はtypedef ではありません)

#include <stdio.h>
#include <net/if.h>

int main(int argc, char **argv)
{
struct ifreq id_ifreq;
fprintf(stdout, ">>>>>> OK <<<<<<\n");
return 0;
}
于 2013-05-09T12:26:11.323 に答える