inline

C 语法中static 和inline联合使用

泄露秘密 提交于 2020-05-06 00:26:10
最近在学习阶段,翻阅代码。发现有一个用法比较让我奇怪,就上网查了一下 static inline void somefunction(void); 这里是举例说明,这行代码是放在.h文件中的。 在此之前,如果对inline概念不了解的请自行wiki http://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0 但是因为自己用得比较少,所以没有太关注, 当然也没有inline修饰符前面要加static的概念 仔细想想: 1、首先,inline函数是不能想传统的函数那样放在.c中然后在.h中给出接口在其余文件中调用的, 因为inline函数其实是跟宏定义类似,不存在所谓的函数入口。 2、因为第一点,会出现一个问题,就是说如果inline函数在两个不同的文件中出现,也就是说 一个.h被两个不同的文件包含,则会出现重名,链接失败 所以static inline 的用法就能很好的解决这个问题, 使用static修饰符,函数仅在文件内部可见,不会污染命名空间。 可以理解为一个inline在不同的.C里面生成了不同的实例,而且名字是完全相同的 PS: inline修饰符不同的编译器不一样,下次有空再补充 IAR中需要手动开发 并直接可以使用,keil中直接__inline即可 只要不是O0就会有内联处理@20140417 来源

DIV块中 元素垂直居中

旧巷老猫 提交于 2020-04-08 04:44:27
1 DIV块中 元素垂直居中 作者:知乎用户 链接:https://www.zhihu.com/question/20543196/answer/99429177 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 block 元素 block 元素利用绝对定位以及负外边距,适用于知道元素的宽度和高度,兼容性好,所以会看到很多远古时代的居中都采用这种办法,参照下图,注意这里的外边距减去的是 block 元素宽度的一半,即 margin:-(width/2) px <img src="https://pic1.zhimg.com/50/6732c0281c722dcb0208716a0df24db3_hd.jpg" data-rawwidth="518" data-rawheight="299" class="origin_image zh-lightbox-thumb" width="518" data-original="https://pic1.zhimg.com/6732c0281c722dcb0208716a0df24db3_r.jpg"> block 元素利用绝对定位以及 transform ,适用于不知道元素的宽度盒高度,参照下图 <img src="https://pic4.zhimg.com

NOIp 2018 前的图论板子总结

∥☆過路亽.° 提交于 2020-04-07 07:25:05
存图 存边 直接开一个结构体数组存边 struct Edge { int begin, end, weight; } edge[10010]; int edge_count; inline void AddEdge(const int &u, const int &v, const int &w) { edge[edge_count++] = Edge {u, v, w}; } 应用: Kruskal's algorithm Adjacency matrix 用二维数组 adj[i][j] 表示 \(i\) 与 \(j\) 的关系 int adj[1010][1010]; #define ADD_EDGE(u, v, w) adj[u][v] = w 应用: Floyd-Warshall algorithm Hangarian algorithm Kuhn-Munkres algorithm Adjacency list 有几种形式, 以 adj[i] 表示以 \(i\) 为开头的边 应用: 各种图论算法 vector 优点: 访问方便, 存图方便 缺点: 消耗空间, 容易 \(MLE\) ; 删边速度慢 struct Edge { int destination, weight; }; std::vector<Edge> adj[1010]; 加边 #define ADD

IAR编译器的常见问题

*爱你&永不变心* 提交于 2020-04-06 07:10:18
最近因为项目需要开始使用IAR for AVR,我用的是5.40版本的,主要是5.40以上才包括了aTtiny87,至于安装文件和和谐文件,大家自己找吧,很好找的。 1.编译报错如图所示: 很显然你没有使能寄存器的位定义。方法如下: Project ——> Option ——> General Options ——> System (如下图所示),勾选 Enable bit definitions in I/O-Include files即可 2.MCU型号选择 如果和我一样都次都是以空工程创建的话,不过忘了第一步先进 Project ——> Option ——> General Options ——> Target 选择所使用的MCU型号,不然编译免不了要报错,如下图所示。 3. 堆栈大小 今天下午编译一个程序,0错误0警告,挺好,可一运行就跑飞,根本不能正常运行。 其实是我没有正常设置堆栈大小导致的这种问题,尤其是在写大工程时,这种错误出现的概率很高。GCC和IAR分配堆栈的方式不同,IAR先分配堆栈空间,相当于定义一个全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;GCC不用先分配堆栈,自动把RAM剩余空间作为堆栈空间,堆栈初始为RAM最高地址。 先编译看看自己的程序用了多少ram,在看看总共有多少ram。 然后 Project ——> Option ——> Linker —

宏,内联函数和普通函数的区别

好久不见. 提交于 2020-04-04 07:56:29
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。 使用内联函数时,应注意以下问题: 1)内联函数的定义性声明应该出现在对该函数的第一次调用之前。 2)内联函数首先是函数,函数的很多性质都适用于内联函数,如内联函数可以重载。 3)在内联函数中不允许使用循环语句和switch结果,带有异常接口声明的函数也不能声明为内联函数。 先说宏和函数的区别: 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型. 2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的. 3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间. 4. 宏的参数是不占内存空间的,因为只是做字符串的替换

关于FSM的C语言实现与详解

好久不见. 提交于 2020-03-30 04:50:06
最近一个项目有一个需求,考量了一下决定使用状态机,实现完需求以后,不得不感慨,状态机在处理逻辑上面实现起来很有优势,也便于管理。 在这里分享一下我所修改的状态机实现。改动的地方不多,参考了《 C语言 最优状态机 规范 - 投机者 》 和原作者的实现一样,状态机的跳转通过函数指针实现,将有关的状态函数实现入口放进一个数组,为了方便维护,数组的下标采取枚举型变量对应。 只要枚举变量中的下标顺序和函数指针数组对应,状态函数中返回下一次的状态,在主体函数中读取到上一次的状态,就可以完成状态机了。 为了方便控制和外部调用,我引入了一个专门记录状态的数据域(st),存放了当前的状态和下一个状态,还引出了一个能够重置状态机状态的接口; 以下是我的实现,使用的时候最简单的方法便是修改头文件中的step_*函数,以及Steps数组与states。高级一点可以将后2者引出,通过外部传参的方式实现。 完整的项目地址请点我 。    这里是其中的一个可用的简单版本 /* # File : fsm.h # Author : toujizhe, schips # Git : https://gitee.com/schips/ # Ref : https://www.cnblogs.com/toujizhe/articles/5473489.html # Date : 2016-05-09 12:20,

css margin知识 全集

心不动则不痛 提交于 2020-03-26 20:03:30
你真的了解margin吗?你知道margin有什么特性吗?你知道什么是垂直外边距合并?margin在块元素、内联元素中的区别?什么时候该用padding而不是margin?你知道负margin吗?你知道负margin在实际工作中的用途吗?常见的浏览器下margin出现的bug有哪些?…… 写css,你少不了与margin打交道,而对于这个平时我们最常用的css属性我们并非十分了解。介于此我打算写下这篇文章,一来是自己工作中的总结,也是对自己知识的一次梳理。 Margin是什么 CSS 边距属性定义元素周围的空间。通过使用单独的属性,可以对上、右、下、左的外边距进行设置。也可以使用简写的外边距属性同时改变所有的外边距。——W3School 边界,元素周围生成额外的空白区。“空白区”通常是指其他元素不能出现且父元素背景可见的区域。——CSS权威指南 我比较喜欢使用“外边距”这个词来解释margin(同理padding可以称之为“内边距”,但是我又恰恰喜欢称呼padding为“补白”或者“留白”),我们可以很清楚的了解到margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的。 Margin的特性 margin始终是透明的。 margin通过使用单独的属性,可以对上、右、下、左的外边距进行设置。即:margin-top、margin-right、margin

CSS文档流与块级元素和内联元素

折月煮酒 提交于 2020-03-25 15:09:43
3 月,跳不动了?>>> CSS文档流与块级元素(block)、内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>,发现里面提到的文档流概念让我很敏感. 可恶的是书中并没有解释文档流是什么东西,或许作者觉得这个太简单了以至于不值一提.但我觉得,这个概念实在太重要了.理解了它,一堆CSS布局的理论都 变得易于理解,并且体会到CSS这套设计的合理性所在. 于是我根据猜测,再加实验,得出一下说法.如有错误,纯属正常. 文档流 将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流. 每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动. 内联元素也不会独占一行. 几乎所有元素(包括块级,内联和列表元素)均可生成子行, 用于摆放子元素. 有三种情况将使得元素脱离文档流而存在,分别是浮动,绝对定位, 固定定位. 但是在IE中浮动元素也存在于文档流中(还让我觉得这样很合理>;<). 浮动元素不占任何正常文档流空间,而浮动元素的定位还是基于正常的文档流,然后从文档流中抽出并尽可能远的移动至左侧或者右侧。文字内容会围绕在浮动元素周围。当一个元素从正常文档流中抽出后,仍然在文档流中的其他元素将忽略该元素并填补他原先的空间。

$P2504 [HAOI2006]聪明的猴子$

a 夏天 提交于 2020-03-23 06:18:23
\(problem\) 首先呢注意数组大小 别栽在自己的数组手里 求两点之间距离是 \(dis\ = \sqrt{(x1-x2)^2+(y1-y2)^2}\) 根据这个 来跑 \(kruskal\) 不过特别注意的是 \(kruskal\) 也是要用并查集的。。 所以并查集的初始化 千万别省去(不然整个并查集的祖先都是0) for(register int i=1;i<=n;i++) fa[i] = i ; 完整代码 #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; typedef long long LL ; inline LL In() { LL res(0),f(1); register char c ; while(isspace(c=getchar())) ; c == '-'? f = -1 , c = getchar() : 0 ; while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(c=getchar())) ; return res * f ; } int n , m ; struct node { int u,v; double w; }; const int N = 1000005; node edge[N] ;

div、span

巧了我就是萌 提交于 2020-03-22 12:13:47
1.Html区块元素   HTML可以通过<div>和<span>将元素组合起来   大多数HTML元素被定义为 块级元素 或 内联元素 ,   而块级元素在浏览器显示时,通常会以新行来开始(或结束)。如:<h1>,<p>,<ul>,<table>   内联元素在显示时通常不会以新行开始。如:<b>,<td>,<a>,<img> 2.<div>元素   HTML <div> 元素是块级元素,它是可用于组合其他 HTML 元素的容器。   <div> 元素没有特定的含义。除此之外,由于它属于块级元素,浏览器会在其前后显示折行。   如果与 CSS 一同使用,<div> 元素可用于对大的内容块设置样式属性。   <div> 元素的另一个常见的用途是文档布局。它取代了使用表格定义布局的老式方法。使用 <table> 元素进行文档布局不是表格的正确用法。<table> 元素的作用是显示表格化的数据。 默认情况下,浏览器通常会在<div>元素前后放置一个换行符 。(可以通过css改变这种情况   1.设置float   设置float:left样式让div对象靠左,这样div会失去本身的宽度样式 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>无标题文档</title> 6 <style> 7