步驟
1, 把一類功能的所有函數實現寫到 xxx.c文件裏面。
2, 把xxx.c 中所有的函數聲明寫到 xxx.h中。
3, 在xxx.h中加入避免頭文件重複包含的語句。
4, 將xxx.h 包含到xxx.c中。(自包含)自實現包含頭文件時用雙引號 不用 < >。
5, 在 main.c文件中包含 xxx.h (隨用隨包含)
6, 在 main.c文件中的main函數中調用實現功能的函數。
代碼演示
main.c文件
#include <stdio.h>
#include "test.h"
int main()
{
//函數調用
char array[100] = "hello";
char array1[100] = "hello";
int ret = myStrcmp(array, array1);
if (ret > 0)
printf("array > array1\n");
else if(ret < 0)
printf("array < array1\n");
else
printf("array = array1\n");
char array2[100] = "world";
int len = myStrlen(array2);
printf("array2 len = %d\n", len);
char array3[100] = "hello";
char array4[100] = "world";
myStrcat(array3, array4);
printf("cat after : %s\n", array3);
char array5[100] = "hello";
char array6[100] = {0};
myStrcpy(array6, array5);
printf("array6 : %s\n", array6);
return 0;
}
test.c文件
//函數實現
#include "test.h"
int myStrcmp(char* s1, char* s2)
{
for (; *s1 && *s2 && *s1 == *s2; s1++, s2++);
return *s1 - *s2;
}
int myStrlen(char* str)
{
int len;
for (len = 0; *str++; len++);
return len;
}
void myStrcat(char* firstName, char* lastName)
{
char* p = firstName;
char* q = lastName;
while (*p)
p++;
while (*p++ = *q++)
;
}
void myStrcpy(char* to, char* from)
{
int i = 0;
while (to[i++] = *from++)
;
}
test.h文件
#pragma once //防止頭文件重複包含
//也可以用下面方式防止頭文件重複包含
/*
#ifndef _TEST_H__
#define _TEST_H__
函數聲明
#endif
*/
//函數聲明
int myStrcmp(char* s1, char* s2);
int myStrlen(char* str);
void myStrcat(char* firstName, char* lastName);
void myStrcpy(char* to, char* from);
運行結果爲:
小結
將來在實際開發中編寫的業務邏輯代碼,把xxx.c實現功能的函數做成.so庫。只是提供xxx.h函數的聲明,讓其他使用者只是知道有哪些功能以及如何調用函數接口。而不提供函數的實現。
我們知道庫是二進制文件,並不是文本文件,所以別人並不能看懂,相當於一次加密。當然庫還有更高級的加密方式,但是給別人提供庫已經是一種加密。