你好!有一个功能:
#include <math.h>
...
void mat4x4_projection(mat4x4 m, const float fov, const float aspect, const float n, const float f) {
mat4x4_identity(m);
const float ctg_half_fov = 1.0f/tanf(fov/2);
m[0][0] = ctg_half_fov/aspect;
m[1][1] = ctg_half_fov;
m[2][2] = (f+n)/(f-n);
m[3][2] = (-2.0f*f*n)/(f-n);
m[2][3] = 1.0f;
m[3][3] = 0.0f;
}
如果将参数名称f
和分别n
替换为far
和near
,编译器将生成错误:Parameter name ommited
.
单词far
并且near
不作为关键字出现(查看http://en.cppreference.com/w/c/keyword)。
其实一个问题,这个错误可以与什么联系起来?
Win 10 x64
gcc 4.8.1
很久以前,当计算机是 8 位和 16 位,以及 32 位刚刚出现时,在 DOS 和 Windows 环境中,指针上有特殊的注释(更常见的是函数指针),说明它是否是需要使用段寄存器进行寻址。因此,
far
当她near
指示地址位于当前代码段内时,她回答说指针位于当前代码段之外。为了支持这一遗留问题,一些编译器仍然包含这些注释。这就是您收到错误的原因。
关于 Windows 环境和 MinGW 编译器,这里更详细地描述了问题的本质。