endif

用VIM打造属于自己的IDE

删除回忆录丶 提交于 2020-01-21 05:45:24
Vim是一个强大的文本编辑器,我参考网上教程定制了一个简单的IDE,具有文件视图、自动补全、批量注释等常用功能。先上图: 要完成整个配置,需要安装ctags、cscope软件,以及taglist.vim、winmanage、omnicppcomplete.vim、NERDcommenter.vim、a.vim、DoxygenToolKit插件。 ctags软件可以帮助我们跳转到函数或者变量的定义位置; cscope软件比ctags更强大,可以找到哪些位置调用了某个函数; taglist.vim和winmanage插件用于显示源代码的结构,比如函数列表; omnicppcomplete.vim插件可以实现C/CPP代码的补全; NERD_commenter.vim可以实现批量注释; a.vim实现.cpp和.h的快速切换,比如敲代码时想立刻查看头文件; DoxygenToolKit插件用于自动产生注释。 有了这些基本功能,Vim俨然成了一个简化版的SourceInsight。 1. 配置.vimrc .vimrc是Vim的配置文件,就在$HOME目录下面,如果没有就自己创建一个。在这个文件里可以深度定制Vim。不要太复杂,先配上最基本的,代码如下: set nocompatible "不要兼容vi syntax on "高亮 set tabstop=4 "tab等于4空格 set

vlc时钟控制

时光毁灭记忆、已成空白 提交于 2020-01-12 08:46:08
1.获取系统时钟 posix标准中相关选项定义了时钟可选单调或者系统实时作为参考 1.1posix标准时钟id获取   posix选项中的_POSIX_TIMERS支持的情况下是可以通过时钟id来方便进程获取准确的时间参数,其中CLOCK_REALTIME对应的时钟为挂墙时钟(wall clock),是跟随系统时间一起变化的;CLOCK_MONOTONIC则是单调时钟,不会因为设置的系统时钟改变而变化,记录的是系统重启到此的间隔。 #if !defined (_POSIX_TIMERS) # define _POSIX_TIMERS (-1) #endif #if !defined (_POSIX_CLOCK_SELECTION) /* Clock selection was defined in 2001 and became mandatory in 2008. */ # define _POSIX_CLOCK_SELECTION (-1) #endif #if !defined (_POSIX_MONOTONIC_CLOCK) # define _POSIX_MONOTONIC_CLOCK (-1) #endif #if (_POSIX_TIMERS > 0) static unsigned vlc_clock_prec; # if (_POSIX_MONOTONIC

预处理——条件编译

点点圈 提交于 2020-01-12 03:51:54
条件编译:预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。 条件编译有三种形式:#ifdef 、#ifndef 、#if (1)#ifdef #ifdef 标识符 程序段1 #else 程序段2 #endif 或者 #ifdef 标识符 程序段 #endif (2)#ifndef #ifndef 标识符 程序段 1 #else 程序段2 #endif 或者 #ifndef 标识符 程序段 #endif (3)#if #if 常量表达式 程序段 1 #else 程序段2 #endif 或者 #if 常量表达式 程序段 #endif 来源: CSDN 作者: csuzhucong 链接: https://blog.csdn.net/nameofcsdn/article/details/103933303

uniapp获取手机状态栏和头部导航栏高度(可用于制作头部自定义导航栏)

时光怂恿深爱的人放手 提交于 2020-01-11 06:48:21
statusBar ---------- 状态栏高度 customBar -------- 状态栏高度 + 导航栏高度 1 、建议在公共位置使用该段代码,以达到可以全局复用的效果。 这里我们存在store中,存在store中有个好处,就是能够实时变化。 避免uni.getSystemInfo()执行未完成时就渲染高度,而在uni.getSystemInfo()完成后无法实时变换高度。 2 、这里又存在一个问题,直接使用this.$store.state.statusBar设置在布局标签上有时会不生效。 解决方法: 重新赋值给该页面自定义的变量,然后设置到布局标签上则能够成功。 话不多说直接上代码 uni.getSystemInfo({ success: (e: any) => { // this.compareVersion(e.SDKVersion, '2.5.0') let statusBar = 0 let customBar = 0] // #ifdef MP statusBar = e.statusBarHeight customBar = e.statusBarHeight + 45 if (e.platform === 'android') { this.$store.commit('SET_SYSTEM_IOSANDROID', false) customBar =

#ifdef,#else,#endif,#if 拾忆

最后都变了- 提交于 2020-01-10 04:01:39
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。 关于预处理命令中的文件包含(#i nclude),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况: 1:情况1: #ifdef _XXXX ...程序段1... #else ...程序段2... #endif 这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。 例: #define NUM ............. ............. ............. #ifdef NUM printf("之前NUM有过定义啦!:) \n"); #else printf("之前NUM没有过定义!:( \n"); #endif } 如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。 我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。 2:情况2: #ifndef _XXXX ...程序段1... #else

#ifdef,#else,#endif,#if用法详解(转)

我的梦境 提交于 2020-01-09 21:39:20
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。 关于预处理命令中的文件包含(#i nclude),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况: 1:情况1: #ifdef _XXXX ...程序段1... #else ...程序段2... #endif 这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。 例: #define NUM ............. ............. ............. #ifdef NUM printf("之前NUM有过定义啦!:) \n"); #else printf("之前NUM没有过定义!:( \n"); #endif } 如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。 我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。 2:情况2: #ifndef _XXXX ...程序段1... #else

#ifndef #define #endif的作用

做~自己de王妃 提交于 2020-01-04 19:09:42
#ifndef x //先测试x是否被宏定义过 #define x 程序段1blabla~ //如果x没有被宏定义过,定义x,并编译程序段 1 #endif   程序段2blabla~   //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1#ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。总结一下:在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,一个c文件多次包含同一个h文件也不会报错。 使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错. 来源: https://www.cnblogs.com/DuhuiliBlog/p/10239180.html

#ifdef...#endif作用

☆樱花仙子☆ 提交于 2020-01-04 18:51:51
#ifdef语句1   //程序2 #endif 可翻译为:如果宏定义了语句1则程序2。 作用:我们可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。 解释如下: 代码举例:新建define.cpp文件 #include<iostream> usingnamespacestd; intmain(intargc,char*argv[]) { #ifdefDEBUG   cout<<"Beginningexecutionofmain()"<<endl;   #endif   return0; } 运行结果为: Pressanykeytocontinue    改写代码如下: #include<iostream> usingnamespacestd; #defineDEBUG intmain(intargc,char*argv[]) {   #ifdefDEBUG   cout<<"Beginningexecutionofmain()"<<endl;   #endif   return0; } 运行结果为: Beginningexecutionofmain() Pressanykeytocontinue    更一般的情况是,#define语句是包含在一个特定的头文件中。 又比如,新建头文件head.h,在文件中加入代码: #defineDEBUG #ifdefDEBUG

CSS常见BUG

雨燕双飞 提交于 2020-01-01 00:39:20
CSS Hack IE条件注释: 所有IE:<!--[if IE]> css code <![endif]--> IE6以上:<!--[if gt IE 6]> css code <![endif]--> IE6以上(含IE6):<!--[if gte IE 6]> css code <![endif]--> IE7以下:<!--[if lt IE 7]> css code <![endif]--> IE7以下(含IE7):<!--[if lte IE 7]> css code <![endif]--> 所有IE: \9 IE6: _ IE7: + IE8和opera: \0 IE9: :root #test { border: 1px #000 solid\9; } 1.如何在IE6及更早浏览器中定义小高度的容器? 方法:#test{overflow:hidden;height:1px;font-size:0;line-height:0;} 备注:IE6及更早浏览器之所以无法直接定义较小高度的容器是因为默认会有行高 2.如何解决IE6及更早浏览器浮动时产生双倍边距的BUG? 方法:#test{display:inline;} 备注:当在IE6及更早浏览器中出现浮动后margin值解析为双倍的情况,设置该元素的display属性为inline即可。 3

cmake基础指令 cmakelist.txt编写

天涯浪子 提交于 2019-12-30 16:05:22
主体框架: 工程配置部分:工程名,编译调试模式,编译系统语言 依赖部分:工程包,头文件,依赖库等 其他辅助:参数打印,遍历目录等 判断控制部分:条件判断,函数定义,条件执行等 源文件(.h , .cpp等) ——> 预编译——>编译——>汇编——>链接——>可执行文件 静态库:链接阶段,库中目标文件所含的所有将被程序使用的函数的机器码,被copy到最终的可执行文件中。 特点 1.静态库对函数库的链接是放在编译时期完成的; 2.程序在运行时与函数库再无瓜葛, 移植方便; 3.运行效率相对快; 4.占用磁盘和内存空间,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。 静态库的局限性: 1.空间浪费是静态库的一个问题; 2.静态库对程序的更新、部署和发布页会带来麻烦; 3.如果静态库lib更新了,所以使用它的应用程序都需要重新编译、发布给用户; 4.对于玩家来说,可能是一个很小的改动,却导致整个程序重新下载,全量更新。 5.若静态库占用1M内存,有2000个这样的程序,将占用近2G的空间。 动态库:程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。 特点 1.可执行文件只包含它需要的函数的引用表,而不是所有的函数代码; 2.只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。 3.动态库在程序运行是才被载入,也解决了静态库对程序的更新