__init位置:/include/linux/init.h定义:#define __init __attribute__ ((__section__ (".init.text")))注释:这个标志符和函
转载 2023-07-03 10:20:39
289阅读
 今天总结一下和函数区别,还有各自优缺点。在预处理阶段会被编译器替换掉,而且一般只做简单文本替换,编译器对其不做任何语法检测。定义时主要用于以下两方面:1、简单文本或字符串替换;2、函数。对于函数,我们可能比较陌生,下面举例来介绍一下函数:#define SQUARE(x) ((x)*(x)) int main() { int input; pri
转载 2023-11-02 07:00:18
121阅读
定义在整个代码文件中,作用范围由定义行开始到文件结束
原创 2022-11-25 11:29:26
147阅读
更加灵活方式控制源代码。 实施条件编译,即有选择地编译
原创 2023-06-15 11:12:03
147阅读
上学时候就没搞清楚这两个东东关系,原本以为是多么难得事情,今天仔细瞧瞧就那么回事。(浮躁大学哦.....)定义:其作用就是“换其名曰”,给程序中一段特殊代码--函数,数据取了个简单明了名字。不过有一点这家伙作用范围是全局。即使它是在某一个函数块中定义。这个其实也容易理解。因为定义是预定义一种,在我们程序之前,由预编译器(Cpp)提前编译出来了,那个时候程序里结构是个啥样
转载 2024-03-11 15:20:04
88阅读
Q_OBJECT作用   The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define sisignal和slot机制QT信号与
转载 2023-06-18 00:10:51
137阅读
内存屏障主要解决问题是编译器优化和CPU乱序执行。编译器在优化时候,生成汇编指令可能和c语言程序执行顺序不一样,在需要程序严格按照c语言顺序执行时,需要显式告诉编译不需要优化,这在linux下是通过barrier()完成,它依靠volidate关键字和memory关键字,前者告诉编译barrier()周围指令不要被优化,后者作用是告诉编译器汇编代码会使内存里面的值更改,编译器应使用内存里新值而非寄存器里保存老值。同样,CPU执行会通过乱序以提高性能。汇编里指令不一定是按照我们看到顺序执行linux中通过mb()系列来保证执行顺序。具体做法是通过mfence/
转载 2012-11-28 17:15:00
421阅读
2评论
内核部分函数带有__init和__exit,负责“初始化”和“清理收尾”该函数。如果该模块被编译进内核,而不是动态加载。 __init使用会在初始化完成后丢弃该函数并收回所占内存, __initdata同__init 类似,只不过对变量有效。简单来说是指示gcc把标记数据或者函数放到指定sector。 linux中把一些启动及初始化时候用数据用__init标识,然后在适当
转载 2015-03-24 13:05:00
119阅读
2评论
断言(assert作用 我的确对#define很多种用法都深恶痛绝,唯对定义在中assert情有独钟。说句实话,我鼓励大家多多使用它--前提是用好它。但问题就在于能不能用好它。 实现方式固然百家争鸣,不过assert多数情况下和下面的定义相差不远: gotcha28/myassert.h #ifndef NDEBUG #define assert(e) ((e) / ? ((void)0) / :__assert_failed(#e,__FILE__,__LINE__) ) #else #define assert(e) ((void)0) #endif 如果ND...
原创 2022-01-04 15:49:04
435阅读
尽管一些用户发现易于使用,但使用它们仍有一些主要限制。 尽管您可以使用来执行任务,但是对于何时以及如何执行这些任务控制有限,并且设置条件可能很困难。 但是,还有一个更强烈理由不使用,那就是当在执行过程中引发错误时,很难捕获错误,因此很难调试。 一些简单VBA编程技能可以替代中可用所有功能,并且随着您变得更加熟练,可以执行更多任务,而则无法实现。 逐项列出,使用VBA而不
转载 2024-05-02 10:23:36
37阅读
#与#define结合,如:#define toString(s) #s代表将s转换为对应字符串,如toString(1234)代表"1234",toString(123 4)代表"123 4" ##与#define结合,如:#define connect(x,y)  x##y代表链接x与y,connect(x,y)表示xyPS:今天将toStri
原创 2013-09-10 21:53:56
520阅读
其中PUZZLE 4给出了一个关于谜题。值得研究。[c-sharp] view plaincopy#include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { printf("%s/n",h(f(1,2))); printf("%s/n",g(
转载 2013-08-29 20:28:00
118阅读
2评论
有空试试 表示内引用文件确保只被使用Objective-C语言文件所引用,保证引用关系清晰。
转载 2016-04-04 15:01:00
138阅读
2评论
2._REENTRANT在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才错误代码时,该变量很容易被另一个线程中函数调用所改变。类似的问题还存在于fputs之类函数中,这些函数通常用一个单独全局性区域来缓存输出数据。为解决这个问题,需要使用可重入例程。可重入代码可以被多次调用而仍然工作正常。编写多线程程序,通过定义_REENTRANT来告
转载 2011-09-15 11:28:00
67阅读
2评论
linux内核中重新定义了printk,如pr_debug,dev_dbg等。要使用这些函数就需要定义DEBUG。 详见:kernel printk信息显示级别 那么DEBUG该定义在什么地方呢? 定义到pr_debug或dev_dbg头文件中,则内核所有的都起作用。则打印信息太多,不易调试。
转载 2017-03-16 21:56:00
67阅读
2评论
看到开放源代码,定义经常这样用#define some() do { do_somt_thing(); } while (0)为什么这样用?能够试一下。假如一个普通定义#define some(x) Fun1(x);Fun2(x)if(condition) some(...
转载 2015-07-01 16:57:00
112阅读
2评论
Linux是一个开源操作系统,有许多发行版,如Ubuntu、Debian、CentOS等。在Linux系统中,红帽是一个广受欢迎发行版。红帽公司是一家专门提供企业级解决方案公司,其主要产品包括服务器操作系统、云计算平台等。在红帽系统中,Linux_linux_是一个非常重要组件。 Linux_linux_是Linux内核中一个定义,用于判断当前系统是否为Linux系统。在Linu
原创 2024-05-08 11:10:38
86阅读
可以通过开启VLIB_BUFFER_TRACE_TRAJECTORY,在mbuf里记录mbuf经过node个数以及所经过nodeindex:        if (VLIB_BUFFER_TRACE_TRAJECTORY && frame)        {    &nbsp
原创 2016-08-25 11:45:54
3101阅读
最近注意到QT_BEGIN_NAMESPACE,具体如下:#ifndef PREVIEWWINDOW_H#define PREVIEWWINDOW_H#include QT_BEGIN_NAMESPACEclass QTextBrowser;QT_END_NAMESPACEclass PreviewWindow : public QWidget{ Q_OBJECT
最近注意到QT_BEGIN_NAMESPACE,具体如下
  • 1
  • 2
  • 3
  • 4
  • 5