1

我有一个用 C 编写的程序。原来的 makefile 有“gnu99”。Clang 编译它没有额外的命令行选项。但是,如果我包含一个用 c++11 编写的仅头文件库(可变参数模板 => 无法单独编译),那么地狱就会崩溃......

简单地用 '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 正确处理这种情况?

即:将 .c 文件编译为 c,但将包含的头文件之一处理为 c++11(实例化可变参数模板,识别名称空间,c++11 标准库,...)

4

1 回答 1

7

是完全不可能的。包含 C++ 标头的唯一方法是编写 C++ 代码。因此,唯一的选择是将您的 C 源代码重写为有效的 C++。对于大多数 C 来说,这并不是什么大问题。

于 2013-06-06T12:53:03.647 回答