我正在使用googleTest测试C代码。我的test.cpp文件看起来像
#include <gtest/gtest.h>
extern "C" {
#include "list.h"
#include "list.c"
}
TEST(ListTest, singleInsertion) {
// some tests
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
但是,尝试使用从终端运行测试g++ test.cpp -lgtest
给出错误和警告,就好像测试的代码是C++而不是C。
错误和警告示例:CCD_ 2和warning: ISO C++ forbids converting a string constant to ‘char*'
我如何声明我的测试文件是C而不是C++?
然而,尝试使用
g++ test.cpp -lgtest
从终端运行测试会出现错误和警告,就好像测试的代码是C++而不是C一样。
这是因为您使用g++
编译器将其编译为C++。使用gcc
编译为C.
不幸的是,这段代码不会编译为C——它会阻塞google::InitGoogleTest()
调用,因为C无法识别::
作用域运算符。我不熟悉这个测试框架,但乍一看,它似乎是用于C++,而不是C.
解决此问题的方法是删除#include "list.c"
指令
extern "C" {
#include "list.h"
}
并将其单独编译为C:
gcc -c list.c
然后编译你的测试仪:
g++ -c test.cpp
然后将目标文件与库链接:
g++ -o test test.o list.o -lgtest