社区
C++ 语言
帖子详情
如何知道类型已经被定义过?
NewVC1978
2006-12-25 07:13:12
例如程序在某个地方已经用typedef定义了某个类型,我如何知道该类型在之前是否已被定义过?
typedef int myint;
或者 #define int myint
#ifdef myint
#undef myint // 这2行代码不起作用
有没有什么预编译指令可以知道呢?
...全文
648
17
打赏
收藏
如何知道类型已经被定义过?
例如程序在某个地方已经用typedef定义了某个类型,我如何知道该类型在之前是否已被定义过? typedef int myint; 或者 #define int myint #ifdef myint #undef myint // 这2行代码不起作用 有没有什么预编译指令可以知道呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
如何
知道
函数或
类型
是在哪里
定义
的
<script type="text/javascript"
Python的class中的变量不
知道
类型
,在函数中赋值才
知道
类型
,怎么
定义
Python的class中的变量不
知道
类型
,在函数中赋值才
知道
类型
,怎么
定义
Java【数组】
定义
与使用,什么是引用
类型
你
知道
吗
数组的
定义
和使用,引用
类型
到底是什么,关于数组的库方法,你都会嘛
模板使用自
定义
类型
_你不
知道
的
类型
检查[JSDoc版]
JS的特性对于前端开发者来说,JsvaScript是一门弱
类型
语言,它的
类型
系统没有强
类型
语言(Java等)提供的
类型
系统复杂和完善,这也就导致了一个必然的问题:需要一些额外的方案为其做
类型
声明。而为Javascript作
类型
声明也将会是一件比较麻烦的事。在既有的技术栈范围内以及实战项目中,我们
已经
接触到了使用 PropTypes、TypeScript 这些静态
类型
检查器为js在进入运行阶段之前作...
你或许不
知道
的varchar2
类型
的
定义
通常,我们
定义
一个varchar2字段时,使用的是如下
定义
: Cola Varchar2(10); 他表示cola可以存储最多10个英文字符,或者5个zhs16gbk中文字符,或者3个utf8的中文字符。 ...
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章