首页 > 其他分享 >typedef and define

typedef and define

时间:2023-08-26 18:56:42浏览次数:48  
标签:typedef int void fx func define

typedef vs. #define

  • #define is a preprocessor token: the compiler itself will never see it.

  • typedef is a compiler token: the preprocessor does not care about it.

  • #define 由预处理器负责;

    • 本质上是 copy and paste;
    • 从声明开始,下面的代码都可见;
  • typedef 由编译器负责;

    • 就像是变量一样,具有作用域;
    • 可以做到一些#define 做不到的事情;

https://stackoverflow.com/questions/1666353/are-typedef-and-define-the-same-in-c

typedef obeys scoping rules just like variables, whereas define stays valid until the end of the compilation unit (or until a matching undef).
Also, some things can be done with typedef that cannot be done with define.
For example:

typedef int* int_p1;
int_p1 a, b, c;  // a, b, c are all int pointers

#define int_p2 int*
int_p2 a, b, c;  // only the first is a pointer, because int_p2
                // is replaced with int*, producing: int* a, b, c
                // which should be read as: int *a, b, c
typedef int a10[10];
a10 a, b, c;  // create three 10-int arrays
typedef int (*func_p) (int);
func_p fp;  // func_p is a pointer to a function that
           // takes an int and returns an int

总之为了避免发生奇怪的事情,最好避免这样的声明方式:

int* a, b;

而是更显示地写成这样:

int* a; // a 是指针变量,可以存储整数变量的地址
int b;  // b 是整数变量

为了防止int* a, b; 这样的东西出现,就像上文展示的那样,最好不要用#define 来给int* 创建 alias,而是应该使用typedef.

When things get "hairy", using the proper tool makes it right

#define FX_TYPE void (*)(int)
typedef void (*stdfx)(int);

void fx_typ(stdfx fx); /* ok */
void fx_def(FX_TYPE fx); /* error */

标签:typedef,int,void,fx,func,define
From: https://www.cnblogs.com/kion/p/17659279.html

相关文章

  • typedef struct and struct
    typedefstructandstructstatus:更新中warning:初学者写的内容,可能有内容上的错误https://stackoverflow.com/questions/252780/why-should-we-typedef-a-struct-so-often-in-ctypedeftypedef仅仅是给已有的类型取一个别名;typedefintmy_inttypedefvs.#defin......
  • 2023-08-26 关于JSON.stringify会过滤调undefined值的问题 ==》在格式化之前先用type
    今天传参给后端的时候就发现了这么个问题,明明对象里面有这个字段a,但是打印出来死活没有,去掉json格式化后才发现是该值a为undefined,遂百度,故得知该值会被过滤掉。被过滤掉的原因是因为undefined值不符合JSON.stringify的规范。......
  • error: undefined reference to `cv::imread(cv::String const&, int)' 解决方法
    方法1原文链接:https://blog.csdn.net/WhiteLiu/article/details/72901520编译时出现下列错误:undefinedreferenceto'cv::imread(cv::Stringconst&,int)'undefinedreferenceto'cv::String::deallocate()'undefinedreferenceto'cv::imread(cv::S......
  • 为什么我们应该避免使用undefined?
    在JavaScript中,undefined是一个特殊的值和全局变量,用于表示一个未定义的变量或属性。当一个变量被声明但未被赋予初始值时,它的值就是undefined。类似地,如果你访问一个对象的不存在的属性,也会得到undefined。为什么我们应该避免使用undefined?可读性差首先,使用undefined可......
  • a build cache key that uniquely defines the task’s outputs based on its inputs
    BuildCachehttps://docs.gradle.org/current/userguide/build_cache.htmlTheGradle buildcache isacachemechanismthataimstosavetimebyreusingoutputsproducedbyotherbuilds.Thebuildcacheworksbystoring(locallyorremotely)buildoutputsan......
  • JavaScript​​-null 、 undefined和布尔值
    null和undefined 概述 null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。vara=undefined;//或者vara=null;上面代码中,变量a分别被赋值为undefined和null,这两种写法的效果几乎等价。在if语句中,它们都会被自......
  • Cannot read properties of undefined (reading 'nodeName')解释
     jquery.min.js:2UncaughtTypeError:Cannotreadpropertiesofundefined(reading'nodeName')解释 这个错误通常发生在尝试访问或操作一个undefined或null值的属性时。错误消息"Cannotreadpropertiesofundefined(reading'nodeName')"意味着在代码中的某个......
  • 快速解决 const 与 typedef 类型组合时 ,const修饰谁的问题
    C++使用typedef给复合类型定义别名时,与const结合会产生看似“令人困惑”的类型推定,例如typedefchar*pstring;constpstringcstr=0;constpstring*ps;cstr到底是什么类型?如果直接把pstring展开成char*,就会认为cstr是constchar*类型,从而认为cstr是一个指向const......
  • Vue中出现“‘xxxxx‘ is defined but never used”解决办法
    【解决办法】:在package.json或者.eslintrc.js中找到 eslintConfig 块,在其rules下加入"no-unused-vars":"off"即可,如下图然后重新npmrunserve即可。其他命令如下:"no-alert":0,//禁止使用alertconfirmprompt"no-array-constructor":2,//禁止使用数组构造器"no-bitwis......
  • mysql在安装group_replication插件时,报错"version libcrypto.so.10 not defined in fi
    问题描述:mysql在安装group_replication插件时,报错"versionlibcrypto.so.10notdefinedinfilelibcrypto.so",如下所示:数据库:mysql8.0.27系统:rhel7.364位1、异常重现mysql>installplugingroup_replicationsoname'group_replication.so';ERROR1126(HY000):......