社区
C++ 语言
帖子详情
如何知道类型已经被定义过?
NewVC1978
2006-12-25 07:13:12
例如程序在某个地方已经用typedef定义了某个类型,我如何知道该类型在之前是否已被定义过?
typedef int myint;
或者 #define int myint
#ifdef myint
#undef myint // 这2行代码不起作用
有没有什么预编译指令可以知道呢?
...全文
613
17
打赏
收藏
如何知道类型已经被定义过?
例如程序在某个地方已经用typedef定义了某个类型,我如何知道该类型在之前是否已被定义过? typedef int myint; 或者 #define int myint #ifdef myint #undef myint // 这2行代码不起作用 有没有什么预编译指令可以知道呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
matlab如何
定义
函数
类型
,Matlab如何
定义
函数?Matlab
定义
函数的方法
Matlab是一款著名的商业数学软件,它的功能十分强大,我们常常会使用它解决一些数学难题。但是刚开始使用它的时候经常会遇到一些难题,比如Matlab如何
定义
函数,如果你不
知道
的话,赶紧看看小编整理的Matlab
定义
函数的方法吧!方法/步骤:1、首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是:function[输出变量]=函数名称(输入变量)%注释%...
C++中的
类型
重
定义
C++中的
类型
重
定义
这几天工作时碰到一个C++的编译错误(我使用的是Visual C++ 7.0),说是有一个类重复
定义
,仔细想想我们的这个项目也是做了好几个Release了, 内部代码应该不会有这样的低级错误, 真把
类型
给重复
定义
了,检查结果正如我预料的一样。 就这样, 我左右没找到原因,被一个编译错误给卡在那里了。(在我的概念中, 程序错误的等级为:编译错误->链接错误->逻辑错误, 此错误属于
ts(TypeScript)
定义
服务器返回数据
类型
ts(TypeScript)
定义
服务器返回数据
类型
1.
定义
基本返回
类型
export type JSONResponse = { stat: string; msg?: string; }; stat:状态 msg:提示信息 (msg后面的?问号表示该参数是可选的,服务器可能返回,也可能不返回) 2.服务器返回为多个同
类型
数据时 先定一个返回的泛型 export type Rows<T extends any> = { items: T[]; total: number;
搞不懂vue3.0 ref和reactive
类型
定义
有什么区别吗?看这里
了解ref和reactive的区别 首先我们都
知道
ref函数和reactive函数都是用来
定义
响应式数据; 但是reactive更适合
定义
复杂的数据
类型
(json/arr)、ref适合
定义
基本数据
类型
(可接收基本数据
类型
和对象) reactive: (1)它的响应式是更加‘深层次’的,底层本质是将传入的数据包装成一个Proxy。 (2)参数必须是对象或者数组,如果要让对象的某个元素实现响应式时比较麻烦。需要使用toRefs ref: (1)函数参数可以是基本数据
类型
,也可以接受对象
类型
(2)如果参数是对象
struct结构体
类型
的
定义
struct结构体
类型
的
定义
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章