2024年 4月 22日
2024年 4月 22日
为什么ObjC的init方法里面可以直接使用self?
self是ObjC类成员方法的隐藏的第一个参数名,它和C++的隐式this指针是类似作用。可以查看.m文件对应的C代码找到端倪: clang -rewrite-objc demo.m (此处简化以省略...
2024年 4月 22日
为什么sin/cos/tan等三角函数需要链接libm而不是默认的libc?
libm是数学库: 随着计算机资源(内存资源)迅速发展,程序体积已经增加已经不是瓶颈,很多编译器不再需要手动连接libm, 而是默认就会链接libm, 当写代码调用三角函数的时候也不必特别链接libm...
2024年 4月 22日
三角函数公式sin/cos/tan的代码实现
一般而言,三角函数的计算是比较复杂的。会采用查表和近似计算(如泰勒级数展开式)来模拟构造三角函数的近似值。 sin(x) = x - x^3/3! + x^5/5! - x^7/7! + …
2024年 4月 22日
同一个文件可以有相同的宏名称不同的定义吗?
可以的。宏定义并不保证一定作用至文件末尾,一旦有#undef取消它定义,源代码之后就不会有先前的宏定义。这意味着,可以在代码开始#define NUM 10,不需要NUM的时候用#undef NUM,...
2024年 4月 22日
2024年 4月 22日
-I <头文件PATH>一定会最先搜索吗?
并不一定,如果是尖括号<>系统头文件路径,-I会优先搜索,但如果是双引号""包含,就不是最高优先级搜索,详情参考如下。 头文件路径规则五花八门,有没有规律?
2024年 4月 22日
2024年 4月 22日
为什么预处理#符号后面可以有空格?
尽管#define是书写常态,# define 也是可行的。因为预处理并不是将#define当成整体,而是#和define两个token来处理,即#标示预处理指令,define是具体的预处理分支。