一、编译过程

image.png
总结来看(省略汇编阶段):
C源码(.c) --(编译)--》 对象文件 --(链接)--》 可执行文件
常见错误:
- 编译(声明 .h): 主要检查语法错误。
- 链接(定义 .c):1. 符号未定义。 2. 符号重定义。
二、测试案例
2.1 模拟链接出错
test.c
#include <stdio.h>
int add(int x, int y);
int main(void) {
int x = 1;
int y = 2;
printf("add(%d, %d) = %d\n", x, y, add(x, y));
return 0;
}

image.png
2.1 解决:
加上add.c
int add(int x, int y) {
return (x + y);
}

image.png

image.png
三、工程实践 -- googletest

image.png
3.1 安装googletest
git clone https://github.com/google/googletest.git
3.2 写一个demo
目录结构
.
├── googletest
├── include
├── lib
└── test.cpp
#include <vector>
#include <gtest/gtest.h>
using namespace std;
int add(int x, int y) {
return x + y;
}
TEST(test, add1) {
EXPECT_EQ(add(3, 4), 7); // ==
EXPECT_NE(add(3, 4), 5); // !=
EXPECT_LT(add(3, 4), 10); // <
EXPECT_LE(add(3, 4), 11); // <=
EXPECT_GT(add(3, 4), 6); // >
EXPECT_GE(add(3, 4), 5); // >=
}
TEST(test, add2) {
EXPECT_EQ(add(3, 4), 7); // ==
EXPECT_NE(add(3, 4), 5); // !=
EXPECT_LT(add(3, 4), 10); // <
EXPECT_LE(add(3, 4), 11); // <=
EXPECT_GT(add(3, 4), 9); // > error
EXPECT_GE(add(3, 4), 5); // >=
}
int main(void) {
int x = 1;
int y = 2;
printf("add(%d, %d) = %d\n", x, y, add(x, y));
return RUN_ALL_TESTS();
}

image.png