目录
10.4函数和变量名称空间
Q:变量和函数是否共享相同的名称空间? GLSL ES不支持函数指针,因此可以始终使用语法来区分不同的情形。 所以这与C ++还是不同的。
A:函数和变量可以共享相同的名称空间。
是否允许在同一范围内重新声明相同的名称? 这将与C兼容。例如:
- 重新定义一个函数。 函数原型是声明,但不是定义。 函数定义既是声明又是定义。 因此,同一范围内的函数原型和函数定义(具有相同功能)符合重新声明的要求
- 将名称声明为函数,然后将其重新声明为结构。
- 将名称声明为变量,然后将其重新声明为结构。
A:对于特定功能,允许单个原型和单个定义。 不允许所有其他多个声明的情况。
10.5本地函数声明和函数隐藏
本地函数是否应隐藏相同的所有函数?是的,如果我们保留本地函数声明。 GLSL ES中本地函数声明的唯一用途是取消隐藏由变量或结构声明隐藏的函数。 保留它们并不是一个令人信服的理由.
R:删除本地函数声明。
10.6 重载main()
用户是否可以重载main()函数?
A:不可以。main函数不能被重载。
10.7 错误报告
一般来说编译器必须报告哪些错误?
有些错误很容易被发现。通常会将所有语法错误和类型匹配错误检测为正常编译过程的一部分。其他语义错误将需要编译器中的特定代码。编译器中的大部分工作都是在解析之后进行的,因此添加一些错误检测不应该显着增加编译的总成本。然而,我们期待开发系统将具有复杂的错误和警告报告,所以没有必要为目标编译器重复此过程。
A:必须报告本规范中列出的所有语法,类型不匹配和其他特定语义错误。 报告其他错误或警告是可选的。
编译器是否应报告是否超出最大值,即使实现支持它们? 这可以帮助实现便携性.
A:不,高端实现在这些领域可能完全超出规范,并且强制使用扩展机制会导致不必要的复杂性。
开发系统应发布可移植性警告.
应该检测静态递归吗?
A:是的,编译器通常会生成必要的控制流图,因此检测很容易.
10.8 结构声明
具有相同名称和相同成员变量的结构是否应被视为相同类型?
A:不,遵循C ++规则。 如果变量使用相同的类型声明,则变量只具有相同的类型,如果它们已使用具有相同名称的不同类型声明,则变量不具有相同的类型。但这不适用于有自己规则的一些链接(例如:统一变量和易变变量)
函数参数中允许结构声明吗?
A:不,遵循上一个解决方案,不可能调用这样的函数,因为不可能声明具有相同结构类型的变量。
10.9 嵌入式结构定义
是否应该允许嵌入式结构定义?
例如:
struct S
{
struct T
{
int a;
} t;
int b:
};
为了访问构造函数,结构名称必须与外层结构在同一级别作用域。 这是相违背的。
选项1:禁止嵌入式结构定义。
选项2:允许嵌入式结构定义,但接受构造函数不可访问。
选项3:范围嵌入式结构名称与最外部范围名称处于同一级别。
R:删除嵌入式结构定义。
版权:https://blog.csdn.net/flycatdeng/article/details/88609705