室友想抄我的代码,给还是不给?
当然可以给,但是建议你在代码里做点手脚。
最初级的方法是在代码头部加入版权声明的注释,像下面这样子(以 C++ 程序为例)。但这种方法只能针对看都不看,直接原封不动地复制粘贴交作业的室友。
/*
* 作业:***
* 作者:哆啦A梦
* 时间:2019-6-17 11:30
* 版权所有,盗版必究
*/
#include <iostream>
#define ___AUTHOR___IS___DORAEMON___ // 这里也是在说明作者是谁
// 再下面写程序代码就好了
对于那种稍微警觉一点的,会复查源代码的室友,会把以上注释去掉,甚至换成自己的注释,到头你反而解释不清楚了。这时候就需要将版权声明放在稍微隐蔽一点的地方。比如,使用 ASCII 码来代替纯粹的英文字符,将版权声明隐蔽到运行结果里。
#include <iostream>
int main(void) {
// 下面这段字符串的值是 FROM: DORAEMON,就是各个字母的 ASCII 码。
// 这句注释只是我来向大家解释这段代码是什么意思的,实际操作时千万别写
char a[] = {70, 82, 79, 77, 58, 32, 68, 79, 82, 65, 69, 77, 79, 78, 0};
std::cout << a << std::endl; // 打印版权信息
// 在下面写程序代码
} // main()
这样的话,室友即使复查你的代码,肯定也看不懂那串数字是什么意思(这都看懂了那还会找你抄代码吗!),越是看不懂的就越不敢乱改,等把作业交上去以后,老师一运行,自然知晓真相。
但是这样还不保险,万一室友运行了一遍程序,发现了你隐藏在代码里的版权信息怎么办?没关系,我们可以用条件触发器,超过指定的时间才显示版权信息!
#include <iostream>
#include <ctime>
int main(void) {
char a[] = {70, 82, 79, 77, 58, 32, 68, 79, 82, 65, 69, 77, 79, 78, 0};
// 1560816000 是北京时间 2019 年 6 月 18 日 8 时的 Unix 时间戳,以下代码的作用是
// 仅当系统时间在 2019 年 6 月 18 日 8 时之后才打印版权信息。
if (std::time(0) > 1560816000) {
std::cout << a << std::endl;
} // if (std::time(0) > 1560816000)
// 在下面写程序代码
} // main()
如此,就既不丢人情,也不怕被卷入抄袭风波了。
更新:补充 cout 和 endl 前漏写的 std 命名空间。