如何知道类型已经被定义过?

NewVC1978 2006-12-25 07:13:12
例如程序在某个地方已经用typedef定义了某个类型,我如何知道该类型在之前是否已被定义过?

typedef int myint;
或者 #define int myint

#ifdef myint
#undef myint // 这2行代码不起作用

有没有什么预编译指令可以知道呢?
...全文
562 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hertz2007 2007-01-03
  • 打赏
  • 举报
回复
好,现在就算你检测了是否已经定义过类型。
那么,新的问题是,你怎么检测你检测过?
如此循环,无有天日也!
NewVC1978 2007-01-03
  • 打赏
  • 举报
回复
谢谢,taodm的回答很专业,我现在明白了

也就是:typedef 定义的变量类型是没有预编译指令可以进行检测的。

谢谢,祝大家新年好运!
taodm 2006-12-29
  • 打赏
  • 举报
回复
按C和C++标准,没有办法知道是否进行过typedef,只能判断是否进行过#define
虽然部分编译器能用对typedef进行#ifdef判断。
所以,楼主的问题有2个解
方法1,如lann64(昆仑大鹏@迦楼罗) 所说,用#define代替typedef
方法2,将所有和编译环境相关的类型定义全部放在一个专门的.h里,根据编译环境#include相应的.h。
NewVC1978 2006-12-28
  • 打赏
  • 举报
回复
"楼主什么鸟态度?!楼上完全可以不必理他!"

?????????我不知道哪个帖子得罪了阁下,或者我帖子带有粗鲁的言语?

本来就事论事,问个问题而已,你这样说话有点那个了吧。

==================

算了,不问了,没意思,懂问题的人不多,不懂的人一堆。
WinWing 2006-12-27
  • 打赏
  • 举报
回复
楼主什么鸟态度?!楼上完全可以不必理他!
lann64 2006-12-27
  • 打赏
  • 举报
回复
请楼主放尊重点,谁也不欠你的,人身攻击的话留着对自己说去吧。

就你那点问题,我第一个贴已经给出了解决办法,你的系统装过MSSDK升级包,那么或者系统定义了额外的环境变量或者需要多加个头文件,无论哪个,你都会有另外一个宏变量用来判断,找到那个宏变量就行了。最不济的方法,自己定义一个变量,在不同的系统间转换时修改这个变量定义就行了。
NewVC1978 2006-12-27
  • 打赏
  • 举报
回复
我才不明白lann64呢,还是一星用户,这个都看不懂,还胡言乱语!

====================================
#define myint int
#ifdef myint 此时返回真,可以知道myint类型被定义过了

typedef int myint;
#ifdef myint? 返回什么?不能返回真,无法诊断myint类型是否被定义过。
==================================

上面两种“类型”定义方式,而非“变量”定义方式!

说白了我的问题来源:我使用了GDI+的代码在自己的编译环境下编译正常(装过MSSDK升级包),
但是拷贝到其他系统上编译就出错了,报告ULONGPTR 类型没有定义,
当然解决问题的方法是简单的,只需要在头文件添加 typedef unsigned long* ULONGPTR
但是这样一来拷贝回我的电脑就出现类型重复定义,我想问大家的是有没有什么指令可以解决反复修改代码才能编译通过的问题?

lin_style 2006-12-26
  • 打赏
  • 举报
回复
改成
新手学C++
todototry 2006-12-26
  • 打赏
  • 举报
回复
个人意见,高手多多指教
todototry 2006-12-26
  • 打赏
  • 举报
回复
namespace
todototry 2006-12-26
  • 打赏
  • 举报
回复
名字空间建立
flyingwow99 2006-12-26
  • 打赏
  • 举报
回复
#define myint int //注意这里的写法!!

#ifdef myint //这里是检测的到的
#undef myint
WinWing 2006-12-26
  • 打赏
  • 举报
回复
不明白LZ的意思
lann64 2006-12-26
  • 打赏
  • 举报
回复
越看越不明白楼主想干嘛?
变量是否定义过的检测仅仅在编程环境下才有用,编译完到了运行期,变量的名字都不存在了,还有什么好检测的。做到编译器排错已经足够了。
NewVC1978 2006-12-26
  • 打赏
  • 举报
回复
flyingwow99,也就是说使用typedef 就没有办法了?

#define myint int
#ifdef myint 返回真

typedef int myint;
#ifdef myint? 返回什么?
NewVC1978 2006-12-26
  • 打赏
  • 举报
回复
楼上的大哥首先祝你节日快乐,

其次没有明白我的意思,我不知道其他包含文件是否对某个类型进行了定义

除了编译器排错,还有没有其他技术获得某个类型是否已经被定义过。

例如你想定义一个myint类型的类,但是myint是内建的或者已经在别处定义过了的数据类型,你的定义编译通不过,这是编译器帮你检查了;有没有自己写代码诊断myint是否已经被定义的呢?

lann64 2006-12-25
  • 打赏
  • 举报
回复
用另一个宏变量来控制。
#ifdef hmyint
...
#else
typedef int myint;
#end

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧