给定函数原型和类型定义:
int my_function(unsigned short x);
typedef unsigned short blatherskite;
Run Code Online (Sandbox Code Playgroud)
是否按标准定义了以下情况:
int main(int argc, char** argv) {
int result;
blatherskite b;
b=3;
result = my_function(b);
}
Run Code Online (Sandbox Code Playgroud)
我可以通过函数原型预测到类型强制吗?
如果您的问题确实是关于参数的类型和参数是否匹配,那么答案是肯定的.typedef不引入新类型,它只为现有类型创建别名.变量b具有类型unsigned int,就像参数一样,即使b使用typedef-name声明blatherskite.
你的例子对于证明这一点并不是很好.所有整数类型都可以在C++中相互转换,因此(忽略范围问题)即使blatherskite指定了不同的类型(新类型),代码也会定义行为.但事实并非如此.所以这也完全有效
void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid
Run Code Online (Sandbox Code Playgroud)