+ -
当前位置:首页 → 问答吧 → 变量名可否和自定义类型重名?

变量名可否和自定义类型重名?

时间:2010-09-02

来源:互联网

偶写了这样一个程序:
oid oid[] = {1,2,3,4};
编译是通过的,也能运行。

但是程序运行总是出错,后来发现有个宏返回值不对
#define OID_LENGTH(x) (sizeof(x)/sizeof(oid))

编译器应该报错的嘛。。。害死人啊~~

作者: steeven   发布时间: 2010-09-02

这样的代码本来就很难看哦。

作者: ecjtubaowp   发布时间: 2010-09-02

允许~

#include <iostream>

using std::cout;

typedef int ii;

int main()
{
        ii ii = 0;
        cout << ii << std::endl;
        return 0;
}

作者: efolzl   发布时间: 2010-09-02

回复 efolzl
你把ii定义为全局变量试试?
这种东西最好不要重名,否则把自己都搞糊涂了。

作者: davelv   发布时间: 2010-09-02

回复 davelv


    恩,改成全局变量就出错了~

    为什么局部变量可以,全局变量不可以呢?对编译方面接触不多,想不出理由~

    我也不认同这种代码风格,自找难受,呵呵~

作者: efolzl   发布时间: 2010-09-02

大概是因为全局变量会在编译器中被标记为全局符号。而这个符号跟前面定义的类型符号冲突了。
test2.c:4: 错误:‘myint’被重新声明为不同意义的符号
test2.c:2: 附注:‘myint’的上一个声明在此
这是编译错误的样子

作者: davelv   发布时间: 2010-09-02

编译器应该对这种情况报错。

作者: steeven   发布时间: 2010-09-02

编译器应该做到的事多了,编译器还应该自动检查所有的内存泄漏和越界访问呢……

作者: 狗气球   发布时间: 2010-09-02

相关阅读 更多