CppUTest不太适合用来做C语言的单元测试

CppUTest是一个知名的C++单元测试框架,也是一个非常好用的单元测试框架。

在介绍CppUTest的资料中,普遍提到,CppUTest 也可以用来做C语言的单元测试。

然而,这种说法其实是不太合适的。

C和C++这两种语言,虽然说,在面向过程编程的时候,二者在语法上很接近,但接近并不是相同。

虽然可以通过extern "C",使两种语言获得一定的互操作性,但二者总归还是两门不同的语言。

说的明白点,C++不是C的超级,换言之,C也不是C++的子集。

维基百科上,对他们的兼容性做了总结,详情见下面的链接。

https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B


这里列出其中的一部分描述:

However, due to minor semantic differences, most non-trivial C programs 

will not compile as C++ code without modification — C is not a subset of C++.

Likewise, C++ introduces many features that are not available in C and in practice 

almost all code written in C++ is not conforming C code.

像我们熟知的,void *在C里面可以灵活运用,在C++里面,则会有编译问题。还有sizeof('a'),在两种语言中,返回值也不相同。


这样一来,使用CppUTest做C代码的单元测试,问题就来了。

测试代码,必须被当成C++代码来编译。但测试代码,难免需要#include某些被测C代码的头文件(包含时需要使用extern "C")。

而头文件中,则可能包含一些C++不支持的C语法。

例如,头文件中,可能有一些static inline函数,函数中可能就有一些C++不支持的语法。也可能会有一些语法一样,但语义不同的语句。

这就可能导致产生编译问题或不可预知的问题。

你可能感兴趣的:(CppUTest不太适合用来做C语言的单元测试)