理解しようとしている GCC インクルードの動作に遭遇しました。私が提供している例は、最も単純なテスト コードです。実際のコード (およびこの動作) は、コードを計測するために使用しているツールの結果です。このツールを使用する必要があります。エラーが発生する理由を理解しようとしています。興味深いことに、g++ は問題なく動作します。次に例を示します。
すべてを含める<sys/types.h>
と問題なくコンパイルされますが、含める"/usr/include/sys/types.h"
とエラーが発生します。
gcc
フルパスを含む以下の最初のコマンドを実行すると、次のエラーが表示されます。
In file included from hello.c:7:
/usr/include/sys/types.h:195: error: redefinition of typedef ‘int8_t’
hello.c:5: error: previous declaration of ‘int8_t’ was here
GCC 4.1.2 (CentOS 5) を使用するコンパイラ コマンドにより、次のエラーが発生します。
gcc -g -I. --verbose -c -o hello.o -DLONG_INCLUDE hello.c
またはエラーを引き起こさないこれ
gcc -g -I. --verbose -c -o hello.o hello.c
コード:
/* hello2.h */
#ifdef _cplusplus
extern "C" {
#endif
int myFunc(int *a);
#ifdef _cplusplus
}
#endif
/* hello.c */
#include <stdio.h>
#include <string.h>
typedef signed char int8_t;
#ifdef LONG_INCLUDE
#include "/usr/include/sys/types.h"
#else
#include <sys/types.h>
#endif
#include "hello.h"
int myFunc(int *a)
{
if (a == NULL)
return -1;
int b = *a;
b += 20;
if (b > 80)
b = 80;
return b;
}
ありがとうございました
アップデート:
After looking at preprocessor output via gcc -E
it looks like when specifying the full path, gcc does not treat it as a system include path and that, somehow, is contributing (causing?) the error. Tries to use the -isystem
option for /usr/include
and /usr/include/sys
but to no avail.