如何让clang忽略c-c ++不兼容错误?

时间:2013-06-06 12:49:32

标签: c c++11 compilation clang compatibility

我有一个用C编写的程序。原始的makefile有“gnu99”。 Clang编译它没有额外的命令行选项。但是如果我包含一个用c ++ 11编写的只有头文件库(variadic templates =>不能单独编译),那么地狱就会松散......

使用'clang inputfile.c staticlib.a -lsomelib'进行简单编译会产生如下错误:

error: unknown type name 'namespace'
error: unknown type name 'template'
... much much more ...

因此它尝试将c ++编译为普通c

如果我尝试'clang ++ -std = c ++ 11 -stdlib = libc ++ inputfile.c staticlib.a -lsomelib',那么:

error: expected ';' after enum
error: cannot initialize a variable of type 'rssFeedState *' with an lvalue of type 'void *'
... much much more ... !!!!! I want to make it ignore these !!!!

重写.c文件以编译为c ++是最后一个选项

如何让clang正确处理这种情况?

ie:将.c文件编译为c,但处理其中一个包含的头文件为c ++ 11(实例化变量模板,识别名称空间,c ++ 11标准库,......)

1 个答案:

答案 0 :(得分:7)

完全是完全不可能的。包含C ++头的唯一方法是编写C ++代码。所以 only 选项是将C源重写为有效的C ++。对于大多数C来说,这不是一个很大的延伸。