如何在C代码上从终端运行谷歌测试



我正在使用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

最新更新