函数声明

Keil5编译——Error: L6218E: Undefined symbol

允我心安 提交于 2020-02-11 12:39:01
1.具体问题 在初学RTThread着手最基础的——动态内存分配线程来控制LED闪烁。keil5编译时遇到以下的错误提示: STM32L431RC_BearPiLED\STM32L431RC_BearPiLED.axf: Error: L6218E: Undefined symbol rt_system_heap_init (referred from board.o). 2.问题分析 猜想: undefined,rt_system_heap_init,这两个关键词说明error与函数定义或者声明缺失有关,而且这个函数也的确是后面加上,忽略了在定义函数的.c文件进行定义或.h进行声明也是有可能的。 进一步: 找到函数调用的地方` # if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) rt_system_heap_init ( rt_heap_begin_get ( ) , rt_heap_end_get ( ) ) ; # endif 顺着函数查看函数的声明时发现——函数在rtthread.h文件进行声明,具体如下,到这里便可以确定错误的原因是调用函数缺少声明!原因是我的 RT_USING_HEAP 宏定义定义在另外一处地方,导致此处无法触发条件编译,进而缺少函数声明,所以链接时出现问题。 # ifdef RT

Execution Context(EC) in ECMAScript

為{幸葍}努か 提交于 2020-02-11 03:57:04
参考资料 执行环境,作用域理解 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(12):变量对象(Variable Object) 深入理解JavaScript系列(14):作用域链(Scope Chain) 深入理解JavaScript系列(13):This? Yes,this! 代码的执行所处的环境,也叫执行上下文,它确定了代码的作用域,作用域链,this属性,代码的生存期等等,让我们从 解释器的角度 看代码是如何执行的。 EC可以用如下的数据结构表达,它有很多属性,VO,[[scope]],this等等。 EC={ Variable Object:...., [[scope]]:..., this:... } 1 三种EC(代码执行环境) global function eval 2 代码执行的过程 一段JS代码进入解释器到执行分为2步骤,这2步各自有各自的事要处理 进入执行环境 执行代码 3 Variable Object(VO) 我们声明的变量, 声明的函数 ,传入的参数都放到哪里去了?引擎是在哪里寻找它们的?其实它们都放入到一个叫VO的对象里去了,可以说了解VO是很重要的。VO的数据结构可以如下表达 VO={ 声明的变量, 声明的函数, 参数(函数内部VO拥有) } 3.1 函数的声明与表达式 函数声明式:function

c++ 面试整理

别说谁变了你拦得住时间么 提交于 2020-02-11 02:58:10
1. 继承方式 public   父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成private #include <iostream> using namespace std; class base { public: void printa() { cout <<"base"<< endl; } protected: void printhello() { cout <<"helo"<< endl; } private: void printnohello() { cout <<"no hello"<< endl; } }; class derived : public base { public: void printb() { printhello(); } // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问 }; int main() { base a; a.printa(); //a.printhello(); //printhello是类derived的protected函数,不可访问。 } 2. sizeof 和 strlen 的区别 sizeof 是一个操作符,strlen 是库函数。

Zookeeper 假死脑裂

烈酒焚心 提交于 2020-02-10 12:23:32
1、死信、延迟、重试队列 DLQ(Deal Letter Queue),死信队列。当一个消息在队列中变成死信之后,他能被重新发送到 DLQ 中,与 DLQ 绑定到队列就是死信队列。 什么情况下需要死信队列 消息被拒绝 消息过期 队列达到最大长度 生产者生产一条消息,存储到普通队列中;设置队列的过期时间为 10 秒,在 10 秒内没有消费者消费消息,那么判定消息过期;此时如果设置了死信队列,过期消息被丢给死信队列交换机,然后被存储在死信队列中。 延迟队列 顾名思义就是延迟执行消息,比如我们可以增加一个队列并设置其超时时间为 10 秒并且不设置任何消费者,等到消息超时,我们可以将消息放入死信队列,让消费者监听这个死信队列就达到了延迟队列的效果。 重试队列 重试的消息在延迟的某个时间点(业务可设置)后,再次投递给消费者。而如果一直这样重复消费都持续失败到一定次数,就会投递到死信队列,最后需要进行人工干预。 2、 双亲委派模型 Java类加载器(ClassLoader) 双亲委派模式要求 除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器 ,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是 采用组合关系来复用父类加载器的相关代码 ,类加载器间的关系如下: 双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求

C++ typedef用法小结 (※不能不看※)

[亡魂溺海] 提交于 2020-02-10 11:19:32
C++ typedef用法小结 (※不能不看※) 第一、四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: char *pa, *pb; 也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。 用途二: 用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如: struct tagPOINT1 { int x; int y; }; struct tagPOINT1 p1; 而在C++中,则可以直接写:结构名 对象名,即:tagPOINT1 p1; 估计某人觉得经常多写一个struct太麻烦了,于是就发明了: typedef struct tagPOINT { int x; int y; }POINT; POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候 或许

理解和运用Java中的Lambda

早过忘川 提交于 2020-02-09 19:05:35
前提 回想一下, JDK8 是2014年发布正式版的,到现在为( 2020-02-08 )止已经过去了5年多。 JDK8 引入的两个比较强大的新特性是 Lambda 表达式(下文的 Lambda 特指 JDK 提供的 Lambda )和 Stream ,这两个强大的特性让函数式编程在 Java 开发中发扬光大。这篇文章会从基本概念、使用方式、实现原理和实战场景等角度介绍 Lambda 的全貌,其中还会涉及一些函数式编程概念、 JVM 一些知识等等。 基本概念 下面介绍一些基本概念,一步一步引出 Lambda 的概念。 函数式接口 函数式接口和接口默认方法都是 JDK8 引入的新特性。函数式接口的概念可以从 java.lang.FunctionalInterface 注解的 API 注释中得知: An informative annotation type used to indicate that an interface type declaration is intended to be a functional interface as defined by the Java Language Specification. Conceptually, a functional interface has exactly one abstract method. Since {

变量对象VO与活动对象AO

元气小坏坏 提交于 2020-02-09 15:43:07
变量对象VO 变量对象VO是与执行上下文相关的特殊对象,用来存储上下文的函数声明,函数形参和变量。在global全局上下文中,变量对象也是全局对象自身,在函数上下文中,变量对象被表示为活动对象AO。 变量对象VO存储上下文中声明的以下内容 { 函数声明FD(如果在函数上下文中),—-不包含函数表达式 函数形参function arguments, 变量声明–注意b=10不是变量,但是var b = 10;是变量,有变量声明提升 var a = 10; function test(x) { var b = 20; }; test(30); // 全局上下文的变量对象 VO(globalContext) = { a: 10, test: <reference to function> }; // test函数上下文的变量对象 VO(test functionContext) = { x: 30, b: 20 };   变量对象VO分类 全局上下文的变量对象VO,函数上下文的变量对象VO。 //全局上下文的变量对象VO就是全局对象GlobalContextVO VO(globalContext) === global; (VO === this === global) 函数上下文变量对象FunctionContextVO   (VO === AO, 并且添加了<arguments>

C++ 类和对象

一曲冷凌霜 提交于 2020-02-09 13:07:25
类和对象 OOP第二课 1 类的构成 1.1 从结构到类 1.2 类的构成 2 成员函数的声明 2.1 普通成员函数形式 2.2 将成员函数以内联函数的形式进行说明 3 对象的定义和使用 3.1 对象的定义 3.2 对象中成员的访问 3.3 类成员的访问属性 3.4 类中成员的访问方式 3.5 对象赋值语句 3.6 类的作用域 类(class)是面向对象程序设计的最基本的概念,是C++最强有力的特征,是进行封装和数据隐藏的工具,它将一个数据结构与一个操作集紧密地结合起来。类对象是类的实例,用类对象模拟现实世界中的事物比用数据对象更确切。 1. 类的构成 1.1 从结构到类 结构是C的一种自定义的数据类型,它把相关联的数据元素组成一个单独的统一体。 例2.1有关日期结构的例子 #include <iostream.h> struct Date { int year; int month; int day; }; int main() { Date date1; date1.year=2003; date1.month=8; date1.day=25; cout<<date1.year<<"."<<date1.month<<"." <<date1.day<<endl; return 0; } ⭐class与struct的比较 类是C++对C中结构的扩展。

Swift 初见

流过昼夜 提交于 2020-02-09 10:07:52
Swift 初见 本页内容包括: 简单值(Simple Values) 控制流(Control Flow) 函数和闭包(Functions and Closures) 对象和类(Objects and Classes) 枚举和结构体(Enumerations and Structures) 协议和扩展(Protocols and Extensions) 泛型(Generics) 通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”。在 Swift 中,可以用一行代码实现: println("Hello, world") 如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式——在 Swift 中,这行代码就是一个完整的程序。你不需要为了输入输出或者字符串处理导入一个单独的库。全局作用域中的代码会被自动当做程序的入口点,所以你也不需要 main 函数。你同样不需要在每个语句结尾写上分号。 这个教程会通过一系列编程例子来让你对 Swift 有初步了解,如果你有什么不理解的地方也不用担心——任何本章介绍的内容都会在后面的章节中详细讲解。 注意: 为了获得最好的体验,在 Xcode 当中使用代码预览功能。代码预览功能可以让你编辑代码并实时看到运行结果。 打开Playground 简单值 使用 let 来声明常量,使用 var 来声明变量

js 函数讲解

这一生的挚爱 提交于 2020-02-09 07:15:32
函数 来自 《JavaScript 标准参考教程(alpha)》 ,by 阮一峰 目录 概述 函数的声明 函数的重复声明 圆括号运算符,return 语句和递归 第一等公民 函数名的提升 不能在条件语句中声明函数 函数的属性和方法 name 属性 length 属性 toString() 函数作用域 定义 函数内部的变量提升 函数本身的作用域 参数 概述 参数的省略 传递方式 同名参数 arguments 对象 函数的其他知识点 闭包 立即调用的函数表达式(IIFE) eval 命令 参考链接 函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。 概述 函数的声明 JavaScript 有三种声明函数的方法。 (1)function 命令 function 命令声明的代码区块,就是一个函数。 function 命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。 function print(s) { console.log(s); } 上面的代码命名了一个 print 函数,以后使用 print() 这种形式,就可以调用相应的代码。这叫做函数的声明(Function Declaration)。 (2)函数表达式 除了用 function 命令声明函数,还可以采用变量赋值的写法。 var print =