当你写了一个函数可以实现某些功能时,你要给其他人使用,却不想让别人看到你写的函数的内容,这时你就可以通过对函数内容进行隐藏来达到目的,函数提供了对过程的封装和细节的隐藏,那么今天我们就来看看如何对函数进行隐藏:
这里以上篇博客写的Swap函数为例,这里先给出全部代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void Swap(int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int a = 10;
int b = 20;
Swap(&a, &b);
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
那么现在我们要对当中的Swap函数进行隐藏,首先要对程序进行变形:
- 添加一个Swap.c源文件,将Swap函数从text.c中移出来到Swap.c源文件中
- 添加一个Swap.h的头文件,将Swap函数的声明放到头文件中(函数的声明这里不过多解释):
- 重新返回text.c源文件,在代码前加上 #include "Swap.h" 对Swap函数调用声明
- 我们发现改变后的代码与改变前的效果是一样的,仍然可以实现功能:
通过上面几步,我们已经对程序完成了变形,那么接下来就要实现对函数的隐藏:
- 首先将之前的代码关闭,重新创建一个新项目叫Swap
- 打开之前的代码的文件,根据之前保存的路径目录去找,将Swap.c和Swap.h剪切:
- 打开新建的Swap项目所在文件,粘贴进来
- 返回vs,在Swap项目中的源文件添加->现有项,将刚才新加入的那两个文件添加进来
- 放进来后通过鼠标拖动,将.h的文件放到头文件目录下,使之看的清晰明了
- 点中Swap这个项目,右击属性
- 在这里面找到配置类型,将后面的应用程序(.exe)改成静态库(.lib),在点击应用,最后确定
- 按F7,这时会创建库。完成之后再次打开文件所在目录,返回到第一个debug文件,进入发现有一个.lib文件
- 现在我们其实已经完成了隐藏操作,那么我们来测试一下。我们刚开始写的代码把Swap.c和Swap.h都移出了,现在只剩下了一个text.c,那么现在将这个.lib文件拷贝一份到这个代码中,再把之前的.h头文件拷贝一份过来
- 那么这里的Swap函数原码可以看到吗?我们打开看一下,这里还是用之前给大家介绍的notepad++来打开,因为有人没看过我之前的文章可能不知道这个软件,这里我把下载链接附上,大家可以使用一下
链接:https://pan.baidu.com/s/1odhoP29Im0S4NBLLyMAhZg
提取码:igbu
打开后我们会发现出现的并不是代码,而是一堆看不懂的符号
- 再次回到vs,将之前的关闭,重新打开之前最早的那个程序(这里说明一下我最早那个项目名字是project1 )这里我们会发现,Swap.c已经出错了,右键将之移除
- 在mian函数前加上一句#pragma comment (lib,"Swap.lib"),这时编译运行就会成功了
- 这样我们发现对函数实现了隐藏,只通过text.c和Swap.h这两个文件就完成了程序运行。
在操作过程中有时会出现一些错误,这里我是将上面的x64改为x86然后就可以运行了。