如此沙雕的代码注释,你们都是段子手!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。

我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路......

首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。

然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗?

这不禁让人想起之前某音乐app的穷逼Vip,果然,穷13在哪里都是会被标记的。

其实,不止这些,代码注释还有很多种玩法。毕竟,最会玩的还是你们程序员。

01 杀了个产品经理祭天

大概全天下的程序员,都悄悄在代码里藏进了自己对产品举起的那把大刀,而且一不留神,刀尖就露出来了......

傻13的是产品,不是我

到底要什么,我也很无奈啊.jpg

▲昕霖是产品经理,李超是设计师

锅是产品的,不是我的

02 诉求都在注释里了

出来工作,不就是为了赚钱吗?一不小心,真实的想法就在注释里流露。

不得不说,该站的程序员,真的很会搞事情。

“钱多活少办公室大,最好还能经常去国外旅游并能报销。”学生时代的Sergey Brin也把这个朴素的愿景写在了简历代码的注释里。原来,每个人的职业追求,都差不多。虽然后来的他成了Google联合创始人。

03 一不小心,就把实话说出来了

领导和老板们总有那么些不可言说的小心思,不过,程序员们你们也太耿直了吧?!

老板的心机,都被你们暴露了。

/** 老板说多线程先不开,等客户提需求优化 */

当然,同事也并没有多么靠谱。

04 隔空喊话,“友好”切磋

在代码注释里,程序员们还能隔着时空通过comment喊话,进行友好地交流与切磋。

比如下面这两行注释,就是跨越两年的一段喊话。

不过,一不小心,画风可能就变了,忍不住就Diss了一下。

//somedev1 - 6/7/02 添加对登录屏幕的暂时追踪功能

// somedev2 - 5/22/07 暂时个屁

05 猿们,要学好英语啊

还有些注释里,包含着前辈程序员的语重心长:要学好英语啊!否则是会闹笑话的。

蓝翔毕业不要紧,重要的是缩写不能乱写:

否则后果很严重:

# 不要再用 anal 做变量名了
# 你们想用 anal 这个缩写来表示analyze(分析),可是 anal 这个单词的意思是“肛门”
# 我特么在哪都能看到 anal 这个词!
# 请不要再这么做了!
# 你们要用就用analyze,或者xbvvzr,要不然用什么其他的都可以。就是别写成 anal_insert 或者 anal_check了
# insert是插入的意思,check是检查的意思,自行脑补吧

06 喜提彩蛋,招聘了解一下

如果你有一双善于发现的眼睛,也许你就能看到,那些藏在Console里的招聘广告。也许,你从此就走上了升职加薪的人生巅峰呢~

07 离职员工的温馨提醒

不过,跳槽需谨慎。史上最良心注释,碰到这样的坑,就赶紧撤吧。

08 我的代码就像一首诗

最后,写代码就像写一首诗,就像唱一首歌。

这样写注释,代码无bug!

不过,话说回来,你们写代码,居然都写注释?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是单链表的完整操作代码,包括创建、插入、删除、查找、遍历等基本操作: ```C++ #include <iostream> using namespace std; // 定义链表节点结构体 struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {} }; // 创建链表 ListNode* createList(int arr[], int n) { if (n == 0) { return NULL; } ListNode* head = new ListNode(arr[0]); ListNode* cur = head; for (int i = 1; i < n; i++) { cur->next = new ListNode(arr[i]); cur = cur->next; } return head; } // 插入节点 void insertNode(ListNode* head, int val) { ListNode* node = new ListNode(val); ListNode* cur = head; while (cur->next != NULL) { cur = cur->next; } cur->next = node; } // 删除节点 void deleteNode(ListNode* head, int val) { ListNode* cur = head; while (cur->next != NULL && cur->next->val != val) { cur = cur->next; } if (cur->next != NULL) { ListNode* temp = cur->next; cur->next = cur->next->next; delete temp; } } // 查找节点 ListNode* findNode(ListNode* head, int val) { ListNode* cur = head; while (cur != NULL && cur->val != val) { cur = cur->next; } return cur; } // 遍历链表 void traverseList(ListNode* head) { ListNode* cur = head; while (cur != NULL) { cout << cur->val << " "; cur = cur->next; } cout << endl; } int main() { int arr[] = {1, 2, 3, 4}; ListNode* head = createList(arr, 4); // 插入节点 insertNode(head, 5); traverseList(head); // 删除节点 deleteNode(head, 3); traverseList(head); // 查找节点 ListNode* node = findNode(head, 2); if (node != NULL) { cout << "Find node: " << node->val << endl; } else { cout << "Not found!" << endl; } return 0; } ``` 上面的代码中,我们定义了一个链表节点结构体 `ListNode`,包含一个整数值 `val` 和一个指向下一个节点的指针 `next`。然后我们实现了创建链表、插入节点、删除节点、查找节点、遍历链表等基本操作。在 `main` 函数中,我们创建了一个包含 {1, 2, 3, 4} 的链表,然后测试了插入、删除、查找、遍历等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值