C/C++模块编译过程

一、编译过程

image.png

总结来看(省略汇编阶段):
C源码(.c) --(编译)--》 对象文件 --(链接)--》 可执行文件
常见错误:

  1. 编译(声明 .h): 主要检查语法错误。
  2. 链接(定义 .c):1. 符号未定义。 2. 符号重定义。

二、测试案例

2.1 模拟链接出错

test.c

#include 
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 
#include 

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

四、附录

gcc版本更新:https://www.cnblogs.com/jixiaohua/p/11732225.html

你可能感兴趣的:(C/C++模块编译过程)