多文件編程 【多文件編程】(26)

步驟

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函數的聲明,讓其他使用者只是知道有哪些功能以及如何調用函數接口。而不提供函數的實現。

我們知道庫是二進制文件,並不是文本文件,所以別人並不能看懂,相當於一次加密。當然庫還有更高級的加密方式,但是給別人提供庫已經是一種加密。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章