如果我们要写跨平台的c/c++代码,很多时候需要处理由于不同编译器对c/c++各个标准支持力度不同导致的兼容性问题,一般通常的解决办法是:自己在代码中通过宏去判断各个编译器的版本、内置宏、标准库宏、__has_feature等来检测处理。
自己如果在代码中按上述的方式检测,会很繁琐,尤其是像c++这种存在大量语法特性,如果一一检测过来,工作量是非常大的。
通过构建工具预先检测编译特性
另外比较省事的方式,就是依赖构建工具提前做好检测,然后把检测结果作为宏添加到编译中去,这样代码只需要判断对应的特性宏是否存在,就可以进行处理了。
在cmake中就有类似的检测机制,非常强大,因此xmake也对其进行了支持,提供更加灵活强大的编译
继续阅读 »
Runtime是什么
Runtime是一个c和汇编写的动态库(感谢Lision的指正),它就像一个小小的系统,将OC和C紧密关联,这个系统主要做两件事 :
1、封装C语言的结构体和函数,让开发者在运行时创建、检查或者修改类、对象和方法等等。
2、传递消息,找出方法的最终执行代码。
继续阅读 »
已经读完的书
linux/unix设计思想
黑客与画家
数学之美
浪潮之巅
深入理解c指针
c陷阱与缺陷
c程序设计语言
大教堂与集市
只是为了好玩(linus自转)
理解unix进程
继续阅读 »
校园网使用PPPoE拨号上网,每次都通过图形化界面通断网络不太方便,希望能一键上网一键下线,于是写了个小脚本。
配置好相关参数后保存为 C:\Windows\System32\surf.bat ,重启命令行即可使用 surf 命令通断网络,常用的话甚至只要 win+r->enter就可以自由迅速地上线下线啦。把下面第二十行的注释去掉可以在联网同时打开ss,有些缺憾的是还没有实现断网时退出ss。
流程控制参考了Batch Guide by Terry Newton 。
```c
REM 校园网使用PPPoE拨号上网,将文件内容存为 C:\Windows\System32\surf.bat ,可以命令行拨号上网
REM 可自行加
继续阅读 »
缘由
JavaScript 数组去重经常出现在前端招聘的笔试题里,比如:
有数组 var arr = ['a', 'b', 'c', '1', 0, 'c', 1, '', 1, 0],请用 JavaScript
实现去重函数 unqiue,使得 unique(arr) 返回 ['a', 'b', 'c', '1', 0, 1, '']
作为笔试题,考点有二:
正确。别小看这个考点,考虑到 JavaScript 经常要在浏览器上运行,在千姿百态的各种浏览器环境下要保障一个函数的正确性可不是一件简单的事,不信你继续读完这篇博客。
性能。虽然大部分情况下 JavaScript 语言本身(狭义范畴,不包含 DOM 等延拓)不会导
继续阅读 »
文/Robin
9 月 26 日,名为 GemSwap 的 SushiSwap 仿盘项目被曝跑路,LP 被卷走。项目在今日 15 点左右发布推特自曝其遭受了 whatitdobb 开发者的攻击,据了解,该项目今日早些时候完成了流动性迁移,但发起攻击的开发者在迁移之前就获得了相关许可,能够将流动池中的代币取走。
笔者去了解了下,大概的攻击手法是这样的:
GemSwap 像 SushiSwap 一样搞了一个 migrator 合约,把之前的流动性迁移到了自己的新合约上(之前的 LP 代币换成了 GLP 代币),然后新的流动性对合约有后门,被攻击者(0xe8596c7385bbe4ce405884c955353c3611d626
继续阅读 »
本文简单介绍c开发中的内存泄漏和动态内存分配函数,并使用valgrind分析c程序的内存泄漏问题。
1 什么是内存泄漏
c语言中,需由开发者负责内存的申请和释放,内存泄漏是指开发者在程序中使用动态内存分配函数xxlloc在堆(heap)上申请内存,内存在使用完毕后未使用free函数释放,那么这块内存在程序退出前都不能再次使用,导致内存使用逐渐增大,直至耗尽,程序异常退出。
继续阅读 »
在Windows上,通过Cygwin编译的c程序在运行时,若有内存错误也会产生类似Linux上的core文件,但是该文件一般是以stackdump为后缀的文本文件,且文件提供的信息有限,只包含了程序coredump时函数调用的栈信息,不能像Linux一样使用gdb调试。所以,在Windows平台调试Cygwin编译的c程序不太方便。本文介绍一种方法,通过反汇编c程序,结合程序coredump时生成的stackdump文件,可以快速定位出程序的coredump位置。
继续阅读 »
虽然已经一年多没有维护gbox这个图形库项目了,最近确实时间不够用。。。
今年的重点是把xmake彻底正好,至少在架构和大功能(包依赖管理)上,要完全落实下来,后期就是零散的维护和插件功能扩展了。。
tbox我会陆陆续续一直进行一些小规模更新,明年上半年稍微重构一些模块后,就开始重点重新搞gbox了,这才是我一直最想做,也是最喜欢做的项目了
所以我宁愿开发的慢点,也要把它做精,做到最好。。
好了,回归正题,虽然现在gbox还处于早期开发中,并不能用到实际的项目中去,但是里面的一些算法,还是很有参考学习价值的。。
我这两天没事就拿出来分享下,如果有感兴趣的同学,可以直接阅读源码:monotone.c
毕竟这个算法我陆陆续
继续阅读 »
为了找工作重新拾起 C++.才发现,被 Python 宠坏后,再回头使用 c++,一下子无法适应如此复杂的情况.
回到正题,C++ 中如何排序一个 map.
我们都知道无法使用 std::sort 来排序 map,只有通过间接的方法.参考 stackoverflow 上的几个答案.
继续阅读 »