endif

CSS浏览器兼容

若如初见. 提交于 2020-02-26 11:03:27
参考资料: CSS Hack Table /*--> */ /*--> */ 1. 各浏览器各自识别的标签 特殊标签 IE6 IE7 IE8 Firefox Chrome Safari !important . Y . Y . . _ Y . . . . . * Y Y . . . . *+ . Y . . . . \9 Y Y Y . . . \0 . . Y . . . nth-of-type(1) . . . . Y Y 2. 区别IE和非IE浏览器 #div { background : blue ; /* 非IE背景蓝色 */ background : red \9 ; /* IE6、IE7、IE8背景红色 */ } 3. 区别IE6、IE7、IE8、FF、Chrome、Safari #div { background : blue ; /* Firefox背景蓝色 */ background : red \9 ; /* IE8背景红色 */ *background : black ; /* IE7背景黑色 */ _background : orange ; /* IE6背景橘色 */ /* IE系列浏览器可读[\9],而IE6和IE7可读[*],另外IE6可辨识[_]。因此依照顺序写下来,就会让浏览器正确的读取到自己看得懂的CSS语法。 */ } body:nth-of

linux4.10.8 内核移植(一)---环境搭建及适配单板。

ぃ、小莉子 提交于 2020-02-20 06:11:50
一、环境搭建   源码包下载:git clone https://www.kernel.org/pub/linux/kernel/v4.x/ linux-4.10.8.tar.gz   或者直接去kernel.org上面进行下载。   交叉编译工具链制作:   这个已经在u-boot移植中已经做过了:http://www.cnblogs.com/kele-dad/p/6910040.html 二、内核启动过程 2.1 Windows 和 Linux 系统的启动区别      由bootloader确定启动哪块单板。 2.2 修改makefile   下面的行注释掉:      修改ARCH:      修改交叉编译工具链:    2.3 选择默认配置   找到默认配置:         进入arm架构中:      可以看到我们的架构中有 mini2440的架构,同时也有s3c2410的配置文件。   进入内核根目录,配置成2410:      打开.config 文件      查看CPU,可以看到有2440的CPU:      同时也支持 mini2440 的单板:    2.4 编译   执行:make uImage   进行编译:      编译提示错误,那是因为没有安装u-boot 依赖包。      提示要安装新包      再执行编译:      编译成功。 2.5

[C] 让VC、BCB支持C99的整数类型(stdint.h、inttypes.h)(兼容GCC)

北战南征 提交于 2020-02-14 14:52:51
新版本—— http://www.cnblogs.com/zyl910/archive/2013/01/10/c99int_v101.html [C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过) 作者: zyl910   C99标准定义了stdint.h、inttypes.h,用于统一的跨平台数据定义。可惜VC、BCB等编译器对C99的兼容性较差,有些版本没有该头文件。本文对此进行探讨,编写了一套兼容VC、BCB、GCC的stdint.h、inttypes.h。 一、心得 1.1 检查   先检查一下各个编译器对stdint.h、inttypes.h的支持情况—— VC6:stdint.h、inttypes.h都没有。 VC2003:stdint.h、inttypes.h都没有。 VC2005:stdint.h、inttypes.h都没有。 VC2010:有stdint.h,没有inttypes.h。 BCB6:有stdint.h,没有inttypes.h。 GCC 4.7.0(Fedora 17):stdint.h、inttypes均有。 GCC 4.6.2(MinGW (20120426)):stdint.h、inttypes均有。 1.2

#define #include

久未见 提交于 2020-02-08 09:24:15
c语言中include“”的区别 < >引用的是编译器的类库路径里面的头文件 " "引用的是你程序目录的相对路径中的头文件 假如你编译器定义的自带头文件引用在C:\Keil\c51\INC\下面 则#include<stdio.h>引用的就是C:\Keil\c51\INC\stdio.h这个头文件 不管你的项目在什么目录里,C:\Keil\c51\INC\stdio.h这个路径就定下来了 一般是引用自带的一些头文件:stdio.h、conio.h、string.h、stdlib.h等等之类的。。 假如你的项目目录是在D:\Projects\tmp\ 则#include "my.h" 引用的就是D:\Projects\tmp\my.h这个头文件 一般是用来引用自己写的一些头文件 如果使用" ",它是会先在你项目的当前目录查找是否有对应头文件 如果没有,它还是会在对应的引用目录里面查找对应的头文件 意思就是,使用#include "stdio.h"如果你项目目录里面,没有stdio.h这个头文件,它还是会定位到C:\Keil\c51\INC\stdio.h这个头文件的 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接 成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用 #ifndef #define #endif 能避免头文件的重定义。

重复的写一下ns 2.35 移植 leach

馋奶兔 提交于 2020-02-08 03:23:05
上次移植貌似之前改了什么参数,导致distCST_总是50.5,改不回来了。所以决定重新搞起。 其实协议代码就这一份,移来移去的真没意思,需要写新的协议还是不会。。。谁有其他的协议代码,求共享。。。reaver13@126.com。 谁会自己添加新的协议,也求分享教程。。 1 下载leach协议包。   包含Makefile, mit.tar.gz就够了。 2 解压mit.tar.gz到leach文件夹(这名字自拟) 3 解压出来的文件夹有个mit,复制到~/ns2.35/目录下(不知道前面~用的对不对,错了求更改)   先说一下,关于#def MIT_uAMPS 是添加在Makefile中定义的,如果去掉重新编译ns,leach这些修改的部分就不会生效了。 4 一下都是一个一个文件打开,看看有“#ifdef MIT_uAMPS …… #endif“这样的部分,就贴到ns2.35下的同名文件同样位置中去。 (1) app.c      Application::Application() : enableRecv_(0), enableResume_(0){#ifdef MIT_uAMPS enableRecv_ = 1;#endif}    #ifdef MIT_uAMPSvoid Application::recv(int link_dst, int data_size,

NS2安装LEACH协议

这一生的挚爱 提交于 2020-02-07 18:23:04
NS2安装LEACH协议 1.解压出来的文件夹有个mit,复制到~/ns2.35/目录下 2.打开每个文件,看看有“#ifdef MIT_uAMPS …… #endif“这样的部分,就贴到ns2.35下的同名文件同样位置中去。 2.1 app.c Application::Application() : enableRecv_(0), enableResume_(0) { #ifdef MIT_uAMPS enableRecv_ = 1; #endif }    #ifdef MIT_uAMPS void Application::recv(int link_dst, int data_size, char* meta_data, int sender) { if (! enableRecv_) return; Tcl& tcl = Tcl::instance(); tcl.evalf("%s recv %d %d %d %s", name_, link_dst, sender, data_size, meta_data); } void Application::recv(char* ch_index) { if (! enableRecv_) return; Tcl& tcl = Tcl::instance(); tcl.evalf("%s recv %s", name_,

C++宏定义命令和条件编译命令

喜欢而已 提交于 2020-02-06 04:42:59
1. 概念 宏定义命令和条件编译命令是都是预处理命令的一种 预处理命令:C++以#为开头的命令 解释:C++编译系统包含一个附加的编译预处理程序,在cpp正式被编译前,首先进行预处理。读取和识别程序中的预处理命令,并按预处理命令对编译的程序进行制定的预处理 预处理命令包含:文件嵌入命令、宏定义命令和条件编译命令 文件嵌入命令就是我们常用的include,这里只说一句 #include <A> #include "A" <>先从系统提供的include目录中搜索, 系统提供的用<> ""先从当前目录中查找,再去include目录搜索, 自己写的用"" ,减少搜索时间 2. 宏定义命令 宏定义命令又称宏替换命令,功能是用一个称为宏名的标识符代表一段字符串,#undef为取消宏定义命令 #define 宏名 宏替换体 #undef 宏名 例子 #define PI 3.1415926 #undef PI #define PI 3.14 #define OUTPUT std::cout<<"test\n" int main(int argc, char* argv[]){ std::cout<<PI<<std::endl; OUTPUT; } 3. 条件编译命令 条件编译命令可以决定哪部分程序编译,哪部分程序不编译 有这么几种写法: #if 和 #endif #ifdef 和 #endif

YYModel 源码解读(一)之YYModel.h

女生的网名这么多〃 提交于 2020-02-02 05:06:34
#if __has_include(<YYModel/YYModel.h>) FOUNDATION_EXPORT double YYModelVersionNumber; FOUNDATION_EXPORT const unsigned char YYModelVersionString[]; #import <YYModel/NSObject+YYModel.h> #import <YYModel/YYClassInfo.h> #else #import "NSObject+YYModel.h" #import "YYClassInfo.h" #endif __has_include 此宏传入一个你想引入文件的名称作为参数,如果该文件能够被引入则返回1,否则返回0。 拓展: #include / #import 语句有两种方式包含头文件,分别是使用双引号 " " 与左右尖括号 < > 。其区别是(对于不是使用完全文件路径名的)头文件的搜索顺序不同 使用双引号 " " 的头文件的搜索顺序: 包含该 #include 语句的源文件所在目录; 包含该 #include 语句的源文件的已经打开的头文件的逆序; 编译选项-I所指定的目录 环境变量INCLUDE所定义的目录 使用左右尖括号 < > 的头文件的搜索顺序: 编译选项-I所指定的目录 环境变量INCLUDE所定义的目录 再来介绍下

Thinking in C++前几章笔记(1)

家住魔仙堡 提交于 2020-01-28 15:49:02
Thinking in C++前几章笔记 1、对象:把问题空间中的事物和它们在解空间中表示行为称为对象。 万物皆对象,程序就是一组对象,对象之间通过发送消息互相通知做什么。创建抽象数据类型是面向对象程序设计的基本思想。所以程序设计中,所做的工作就是创造新的数据类型。而面向对象程序设计的难题之一,是在问题空间中的元素和解空间的对象之间建立一对一的映射。 2、代码重用是面向对象程序设计语言的最大优点之一。重用一个类最简单的方法就是直接使用这个类的对象,我们常称为组合(has a)。而继承(基类和派生类)是is a的关系。 3、我们把处理派生类型如同处理其基类型的过程称为向上类型转换(upcasting)。 4、理想的类应当一目了然。运行进行可能是OOP最主要的好处。引入一个库,就是在向该语言引入一个新的类型。 5、极限编程(XP,eXtreme Programming):先写测试;结对编程(两个人)。 8、asm关键字 这是一种转义(escape)机制,允许在C++程序中写汇编代码。 9、调试技巧 1)使用预处理调试标记 #define DEBUG //... #ifdef BEBUG //debugging code here #endif//DEBUG 2)把变量和表达式转换成字符串 在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。(原文:When

Linux下__attribute__((visibility ("default")))的使用

倖福魔咒の 提交于 2020-01-25 08:58:58
在Linux下动态库(.so)中,通过GCC的C++ visibility属性可以控制共享文件导出符号。在GCC 4.0及以上版本中,有个visibility属性,可见属性可以应用到函数、变量、模板以及C++类。 限制符号可见性的原因:从动态库中尽可能少地输出符号是一个好的实践经验。输出一个受限制的符号会提高程序的模块性,并隐藏实现的细节。动态库装载和识别的符号越少,程序启动和运行的速度就越快。导出所有符号会减慢程序速度,并耗用大量内存。 “default”:用它定义的符号将被导出,动态库中的函数默认是可见的。”hidden”:用它定义的符号将不被导出,并且不能从其它对象进行使用,动态库中的函数是被隐藏的。default意味着该方法对其它模块是可见的。而hidden表示该方法符号不会被放到动态符号表里,所以其它模块(可执行文件或者动态库)不可以通过符号表访问该方法。 要定义GNU属性,需要包含__attribute__和用括号括住的内容。可以将符号的可见性指定为visibility(“hidden”),这将不允许它们在库中被导出,但是可以在源文件之间共享。实际上,隐藏的符号将不会出现在动态符号表中,但是还被留在符号表中用于静态链接。 导出列表由编译器在创建共享库的时候自动生成,也可以由开发人员手工编写。导出列表的原理是显式地告诉编译器可以通过外部文件从对象文件导出的符号是哪些