1、#define 和typedef区别

#define一般用于定义常量和语句宏定义,在编译的时候充当宏替换。当然也可以完成typedef的一小部分功能,记住只是一小部分。

typedef 用来声明新类型名,目的是为了可读性以及可定义变量性。

例子1:

#define INT  int  //没有分号!!

typedef int  INT;//记住typedef前面没有 #,以及该语句需要 ; 分号结束。

这个例子中,INT num;这样语句都能实现,基本没有区别。

例子2:

#define pINT  int*

typedef int* pINT;

这个例子就有区别了,要定义int*a,*b;  用define实现的是 pINT a,b;替换之后 int* a,b;变成定义的是指针a,和变量b。而typedef 用法,pINT a,b;定义的是指针变量a和指针变量b。

所以在声明新类型名的时候要用typedef,为了安全性。

2、#define 、#if defined()、#ifndef、#ifdef、#else   #elseif  #endif

a)#define 定义常量,如#define  DEBUG 说明DEBUG已有定义

b)#if defined(DEBUG),如果只有一个条件,等同于#ifdef  DEBUG

所以#if defined()常用于多条件限制的环境,多条件一般中间可以用“||、&& 、!”来形成多条件判断,如#if defined(EBUG)&& defined(WIN32)

意思是当DEBUG 和WIN32都有定义的时候,才进入#if条件下的语句。

c)#ifdef DEBUG 如果定义了DEBUG ,执行#ifdef 条件下的语句。其意图与#ifndef DEBUG

相反,中间的n代表没有的意思,即如果没有定义。。。。

d)#endif  配对#if 配对

#defned typedef 以及#ifdef #define #ifndef #endif相关推荐

  1. #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined解释

    #define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. #define            定义一个预处理宏 #undef     ...

  2. #ifdef,#ifndef,#define,#endif解析(原)

    我们在看一些开源的源代码的时候,经常会看到如下情景: # if defined(_PTHREADS) && !defined(_NOTHREADS) # define __STL_PT ...

  3. C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef

    C语言的条件编译#if, #elif, #else, #endif.#ifdef, #ifndef 有些程序在调试.兼容性.平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可 ...

  4. c语言中endif的作用,C语言中#ifdef,#ifndef和#endif的作用

    现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...

  5. 宏定义、define、defined、ifdef、ifndef、undef总结

    define.defined.ifdef.ifndef.undef的用法都属于预处理部分,所谓预处理是指在进行第一遍扫描(语法扫描和语法分析)之前所做的工作.当对一个源文件进行编译时,系统将自动引用预 ...

  6. 如何解决头文件重复包含和宏的重复定义问题:用#ifndef 、#define、#endif

    如何解决头文件重复含问题 #ifndef .#define.#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ .... ...

  7. 用#ifndef、#define、#endif避免头文件的重定义

    在一个大型项目里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量"重定义"的错误.在头文件中使用#ifndef.#define.#endi ...

  8. #ifndef HeaderName_h #define HeaderName_h #endif 使用详解

    想必很多人都看到过头文件中写有:#ifndef HeaderName_h                                                #define HeaderNa ...

  9. uni-app条件编译:#ifdef #ifndef #endif

    uni-app条件编译:#ifdef #ifndef #endif 语法: // #ifdef %PLATFORM% 这些代码只在该平台编译 // #endif #ifdef : if defined ...

最新文章

  1. Spring配置数据源的四种方式
  2. SVN服务端的搭建及客户端连接(云上搭建服务端)
  3. python 在Windows 下切换工作目录
  4. 数据回归分析和拟合的Matlab实现
  5. 《HTML5多媒体应用开发》——第2章 HTML5多媒体元素2.1 Web多媒体历史
  6. java全面的计算器代码_Java实现计算器的代码
  7. elasticsearch mapping之store
  8. 干货 | 阿里巴巴HBase高可用8年抗战回忆录
  9. 城市间紧急救援 (25 分)【dijkstra模板 超时原因】
  10. 如何使用 Convert.exe 将分区转换为 NTFS 文件系统
  11. hihoCoder-1038- 01背包(dp)
  12. 第一个DFS,第一个递归 HDU1515
  13. 像excel一样规律填充(三)
  14. 学习python: x+=1 与 x = x + 1
  15. 云服务器我的数据保存在哪个文件夹,云服务器存储在哪里
  16. vue-awesome-swiper的点击事件
  17. 该内存不能为written或read的解决方案(比较全)
  18. 小米pro15拆机_小米笔记本Pro 15增强版拆解:重新定义高质低价
  19. iOS封装相册API的tips
  20. docker部署rabbitmq出错touch: cannot touch ‘/etc/rabbitmq/rabbitmq.conf‘: Permission denied

热门文章

  1. 能力成长模型(转自阿里梁飞老师博客)
  2. Spring Boot+Vue全栈开发实战——花了一个礼拜读懂了这本书
  3. Redis实战之Redis + Jedis
  4. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
  5. 2017秋招知识点小记(C/C++)
  6. 软件和资源收集(三)
  7. 智力题(真尼玛有意思!!!)
  8. 调用baidu aip
  9. 都是坑啊!银行为什么要以科技岗招人然后让人干两年柜员?
  10. C# 集合-并发处理