1

pycparserを使用して多数の.cソースファイルを解析しますが、パーサーは#includedライブラリ内の多くのものを処理できず、私は自分の目的のためにそれらを本当に必要としません。コンパイルする必要はありません。処理している特定の.cからASTを生成するだけです。私が今それを渡しているcppargsは次のとおりです:

cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]

何か案は?

ありがとう!

4

2 に答える 2

4

オプションをプリプロセッサに指定してみてください-nostdinc(オプションを渡していないことを確認してください-I)。でこの入力が与えられた場合foo.c:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv) {
        return 0;
}

ランニング:

cpp -nostdinc foo.c

私に与えます:

# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "foo.c"




int main(int argc, char **argv) {
 return 0;
}

そして、次のエラー:

foo.c:1:19: error: no include path in which to search for stdio.h
foo.c:2:20: error: no include path in which to search for stdlib.h
foo.c:3:20: error: no include path in which to search for unistd.h
于 2012-04-27T16:05:35.073 に答える
0

1 つの解決策は #include ガードを使用することです

各ヘッダーに従来のラッパーがある場合、たとえば.

#ifndef THIS_FILE_H
#define THIS_FILE_H

   // stuff

#endif

次に#define、無視したいすべてのヘッダーガードタグを単純に指定できます

于 2012-04-27T16:01:13.750 に答える