明天の时光机

一个非典型程序员


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

解决VS2017运行emwin模拟机不能运行的问题

发表于 2018-09-23 | 分类于 技术杂谈 | | 阅读次数:

emwin是一个很好用的嵌入式图形库。当我们下载了官网的windows下模拟文件后,用最新的VS2017打开编译时,会编译失败。下面我们来解决下编译问题。
使用的emwin版本是V5.48

当我们用VS2017打开SimulationTrial.sln时, 会提示我们升级平台工具集,我们直接点击确定即可。

升级平台集

阅读全文 »

在SecureCRT中使用VBScript脚本

发表于 2018-09-19 | 分类于 技术杂谈 | | 阅读次数:

SecureCRT是VanDyke Software的一个商业SSH、Telnet客户端和虚拟终端软件

在SecureCRT中使用VBSCRIPT脚本,确实能够提高我们的工作效率,并且可以实现完全的自动化。

先看一个自动telnet登录的脚本例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# $language =  "VBScript"

# $interface = "1.0"

Sub Main

crt.Screen.Synchronous = True

' connect to host on port 23 (the default telnet port)

'

crt.Session.Connect "/TELNET login.myhost.com 23"

crt.Screen.WaitForString("login:", 5)

crt.Screen.Send "myusername" & chr(13)

crt.Screen.WaitForString("password:", 5)

crt.Screen.Send "mypassword" & chr(13)

crt.Sleep (1)

crt.Screen.Synchronous = False

End Sub

PS:

  1. 如何发送控制字符(比如Ctrl+C)
    crt.screen.sendkeys(“^C”)

C语言获取变量类型的方法

发表于 2018-09-17 | 分类于 技术杂谈 | | 阅读次数:

前言

众所周知,C语言本身没有多态的概念,函数也没用重载的概念。
而在动态类型的语言里面,往往有typeof这种语法,来获取变量的数据类型。例如,JavaScript当中,typeof以字符串型式返回了这个变量的数据类型;python中有type()的方法来获取变量类型。借由这种特性,往往可以根据传入参数的类型不同,产生不同的行为。

C语言标准并不支持typeof的语法,但是gcc扩展是支持typeof语法的。
可以查看gcc对于typeof的说明

用法

1
2
3
int a;
typeof(a) b; //相当于 int b;
typeof(&a) c; //相当于int *c;

也可以直接使用类型作为参数:
typeof(int *)

用途

在linux源码中,typeof被用来实现一个安全的max和min宏定义。
在include /linux/kernel.h中:

1
2
3
4
5
6
7
8
9
10
11
#define min(x, y) ({				\
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })

#define max(x, y) ({ \
typeof(x) _max1 = (x); \
typeof(y) _max2 = (y); \
(void) (&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })

可以看出,linux使用typeof获取传入的x和y的类型,然后定义局部变量以消除参数副作用。

注意中间的比较操作 (void) (&_max1 == &_max2) 与 (void) (&_min1 == &_min2)
这两行代码是用来做类型检查的,如果x和y的类型不同,那么编译器将提示如下警告信息,这对检查代码很有帮助。
xxx.c:35: warning: comparison of distinct pointer types lacks a cast
这个类型检查是怎么回事呢?
简单来说,在C99标准的第6.5.9节中规定,对于比较运算符 == 和 != 来说,如果比较的对象是指针,那么指针所指的对象类型必须一致,否则抛出上面的warning信息.

GCC对Typeof的处理

GCC提供的typeof,实际上是在预编译时处理的,最后实际转化为数据类型被编译器处理。

参考链接
6.6 Referring to a Type with typeof
藝術與核心

undersky

3 日志
1 分类
6 标签
© 2018 — 2019 undersky
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4