自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (2)
  • 收藏
  • 关注

原创 C语言基础:为什么函数调用返回后,函数中定义的局部变量就不可用了?

这个问题涉及到栈空间定义、如何在栈分配空间以及释放空间、c语言如何实现函数调用。下面我们对以上问题一一说明。

2024-03-26 15:49:04 424

原创 C语言基础:Static语句的作用

在C语言的编程过程中,static语句会经常用到。本文集中讲一下static语句的使用。以上就是今天要讲的内容,本文仅仅简单介绍了static关键字在C语言中的应用,望知晓。

2024-02-29 15:29:06 328

原创 C语言基础:extern “C” 语句的作用。

对于C和C++程序员来说,extern "C"语句应该不陌生。但是该语句的具体作用,用了之后对代码有什么影响,可能会一知半解。今天就从extern “C”的出现、作用、以及配套使用场景,几个方面介绍一下。

2024-01-30 18:09:04 385

原创 C++基础7:unary_function、binary_function、not1、bind2nd函数

我在前面的文章中介绍了C++中的仿函数和函数适配器,这两个技术在STL中用的很广泛。今天我们研究下STL中的unary_function、binary_function、not1、bind2nd是如何实现的。

2023-12-13 15:31:16 100

原创 记一次愉快的BUG调试事件

灵光一闪,想到在单维彰老师的《计概16讲》中,Windows中的换行和Linux中的换行不同,Windows中是“\r\n”,而Linux中是“\n”。于是在生成脚本时,把“\r\n”换成了“\n”,再上传Linux,并执行。顺便说一下单维彰老师的《计概16讲》,讲的非常好,到目前为止我看过有3遍了,B站上就有资源。背景:项目需要在Windows上生成脚本文件,将脚本文件传到Linux系统上,并执行。BUG现象:生成的脚本无法在Linux上执行,在Windows上看着文本是正常的。

2023-11-20 10:56:41 65

原创 LabView中Double转U8数组、U8数组转Double

在LabView的实际开发项目中,免不了数据类型之间的转换。比如要用串口发送一个Double类型的变量到单片机中,这就需要将Double转成U8数组再发送。接下来我们讲一下如何进行转换。

2023-10-31 16:14:13 566

原创 什么是串行化

如果你处在计算机行业,肯定听说过串行化这个词。串行化是计算机行业的一个术语,我之前的文章中也提到过,术语是为了方便大家沟通交流的。不要害怕陌生的术语。下面我们从宏观上介绍串行化。浅显的理解是把处于内存中的类,保存到硬盘上。当下次软件启动时,可以进行反串行化,还原类现场。这样听一起来是不是有些熟悉,这不就类似保存配置文件嘛,将软件的设置保存成XML或者INI文件,下次根据配置文件设置软件配置。其实意思是一样的。串行化除了保存配置文件外,还可以将串行化的结果,通过总线传输,在总线的另一端还原类现场。

2023-09-28 14:15:48 282

原创 C++基础6:函数重载

在C语言中我们把完成一项独立工作的代码写到一个函数里,函数包括函数名和函数体。函数名是函数的唯一ID,它要保证唯一性。如果出现重名的函数,编译器就会报重复定义的错误。当遇到函数功能相似,只有细微差别的两个函数,怎么起函数名就成了棘手的问题。起一个名字,报重复定义错误;起不一样的名字,又无法通过名字,判断函数的功能。C++的函数重载就是解决上述的问题。

2023-08-30 10:29:40 85

原创 C++基础5:模板

本文讲了C++中模板的用法,以及模板解决的什么问题。在C++中有两种编程的方式,一种是面向对象的,使用继承、接口、多态等机制;一种是面向泛型的,这种方式就是使用模板。最典型的例子就是STL(标准模板库)。我的理解,模板是一种代码生成手段。一般的代码都是程序员自己敲出来的,用模板可以让编译器为我们生成代码。给编译器一个模子,让它按照这个模子,为我们生成代码。这样说可能有点玄乎,咱们接着往下看。这一篇写了一下我理解的C++的模板,想到哪儿,我就写到哪儿,没什么章法,望各位看官,多多包涵。

2023-07-28 09:58:29 49

原创 C++基础4:函数适配器

函数适配器技术可以在不修改源代码的基础上,增加函数的功能。是对面向对象开闭原则的体现。在C++ STL中就是用了大量的函数适配器,比如not1。} }我们定义了一个仿函数类,该类很简单,就是把传入的flag,直接返回。opt(flag);} }该适配器的功能是在原有功能的基础上,取反。以上就是今天要讲的内容,函数适配器是STL很重要的一部分,遍历集合函数中的条件语句,用到了很多的函数适配器。

2023-06-28 17:44:48 538 3

原创 C++基础3:仿函数

C++的仿函数技术是基于C++的运算符重载实现的,这项技术广泛应用于STL(标准模板库)中,本篇来讲解一下该技术。简单来说,仿函数就是让一个类用起来像函数。我们都知道函数的调用格式是“函数名+()”,括号里面是形参列表。该格式典型的特征是用"()"去调用函数。那么如何才能让一个类,也具备这样的特征呢?这就需要用到C++的运算符重载技术。下面我们看实例代码。仿函数是STL的六大部件之一,与之相关的还有仿函数适配器。关于仿函数适配器,我们后续会单独出一篇文章。

2023-05-22 12:04:29 206

原创 如何用C语言实现C++的模板

前两天由于工作需要,要用C语言生成类似C++ template的效果。大致的思路我是知道的——用C语言的宏实现,但是说到细节,就不甚了解了。之前看的达内的一个老师讲STL的视频。他在视频里好像做过类似的事情。凭着对视频的记忆以及以前用C语言宏的经验,我也尝试着做了做。最后呈现的效果还不错。写个文章记录一下。

2023-04-23 09:25:39 359

原创 VB如何使用剪切板

VB如何使用剪切板

2023-04-11 15:57:32 767

原创 关于C语言指针的理解

该文是本人对C语言指针的理解,写的不好,各位看官多多原谅

2023-03-06 17:43:37 62

原创 C语言设置环境变量

C语言如何修改环境变量。

2023-02-23 18:03:56 668

原创 C++基础2:构造函数、拷贝构造函数、赋值运算符重载

C++引入类的概念后,代码的编写方式有了翻天覆地的变化。所有的操作都是针对类展开的,本系列就是对比C和C++的不同,来学习C++的基础。不但让你知其然,也要让你知其所以然。

2022-11-01 14:44:40 280

原创 C++基础1:从const关键字看变量的基础单元--类

C++基础第一篇 const

2022-07-20 11:51:21 124

原创 C++基础 开篇

C++是一款支持面向对象的语言,最基础的变量单元是类。 类中可以包含一个或多个内建类型的变量。内建类型就是语言自带的类型,比如:char、int、float、double等。除了包含变量以外,类里面还可以写函数。这跟C语言有很大的不同。...

2022-07-09 12:33:16 1018

原创 简单聊一聊近期的写作计划

写作计划

2022-07-01 11:18:28 266

原创 C语言基础:变量的含义

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2022-05-31 08:00:00 609

原创 奇葩的链接问题

前天开发的时候,遇到一个奇葩的链接问题。 其实也不算奇葩了,是我脑袋秀逗了。工程里有两个源文件:main.c 和 SCI.cppmain.c如下:extern void SCI_Init();void main(){ SCI_Init();}SCI.cpp如下:void SCI_Init(){ //SCI init code}然后我用gcc编译,gcc main.c SCI.cpp -o main提示如下的错误:main.c:(.text+0x8):undefined

2022-05-11 18:12:22 212

原创 C语言基础:弱引用

假如在main.c中有如下一段代码:#include <stdio.h>extern void do_something();void main(){ do_something(); printf("hello world.\n");}我们都知道,直接编译main.c会出现无法解析的外部符号错误或者没有定义的引用错误,如下图。因为do_something函数没有定义嘛。此时如果我把do_something的声明改成如下的样子:__attribute__((weak))

2022-05-09 12:13:35 764

原创 添加到simulink里的菜单,显示灰色

可能的原因之一:点到了stateflow里。

2022-01-26 14:36:10 1192 1

原创 conflicting types for ‘DI_L_02‘

出现这种情况的原因是 不同的.h文件中,对变量的声明不同。我的一个.h的声明是extern __MP boolean_T DI_L_02;另一个.h中的声明是:extern IoAbtype DI_L_02;

2022-01-25 13:58:57 121

原创 C# TextBox获取焦点

有两种方法:1.this.ActiveControl = TextBoxName;2.this.TextBoxName.Focus();

2021-10-29 14:25:57 2814

转载 什么是值类型、引用类型?

其实理解值类型和引用类型非常简单。当我在函数里定义了一个类变量,编译器是否给该变量分配了内存。如果分配了就是值类型,如果没有分配就是引用类型。比如C++语言,(Person是个类)Person person;这样写的话,编译器实实在在在内存中做出了Person类。如下图所以C++是值类型的语言。如果是Basic语言,写如下定义。dim person as Person这样写,编译器不会分配内存空间。person只是一个指向Person类的引用,可以理解成C语言里的指针。当调用new语句时

2021-10-26 11:19:28 244

转载 什么是回调函数?

回调函数其实不是C语言特有的,其它语言也有回调函数。书上对回调函数一般的解释是 回调函数是好莱坞模式:Don’t call me,I will call you。这句话就给人带来误解,因为这句话是站在回调函数的调用方说的,我们是回调函数的提供方,所以不好理解。从回调函数的提供方来说,凡是你在代码里没有写调用语句调用的,而函数又会在某些情况下执行的函数,就叫回调函数。举个例子,我们见的最多的回调函数就是main函数。你的代码里有写main函数的调用语句吗?像这样 main();但是你一点运行,m

2021-10-20 10:13:42 140

转载 C语言基础:编译的基本单元是什么?

大家都知道一个C语言写的程序,需要进行 预编译->编译->汇编->链接,四个步骤才能生成可执行文件。今天我们挖掘一下,编译是以什么为单位进行的。所谓的编译单位,就是说我们在代码里写的#开头的指令的作用范围是多大,比如我们在写.h文件的时候,会在开头写上如下的内容:#ifndef XXXX#define XXXX…头文件内容…#endif这些内容是为了防止重复包含,导致的重复定义错误。那么#define XXXX,一句的作用范围是多大呢。 是不是在工程的一个.c文件定义了这个

2021-10-13 11:04:58 1919

原创 C语言基础:swap函数一定要传指针吗?操作变量的本质是操作内存空间。

大家在学习C语言的时候,一定遇到过经典的swap函数,它的作用是交换两个变量的值。老师讲的时候一定会说:要传变量的指针,不然不会交换两个变量的值。传值:void swap(int a,int b){int tmp;tmp = a;a = b;b = tmp;}传地址:void swap(int* a,int* b){int tmp;tmp = *a;*a = *b;*b = tmp;}可是大家有没有想过为什么传指针才能交换两个变量的值。这涉及到函数调用的知识,C语言是用栈

2021-10-12 14:55:48 944

原创 VC中如何查看预编译的结果 .i文件

在程序的编译的整个过程中,预编译是个很重要的环节,有了预编译步骤,程序中才可以使用#开头的指令,像#include、#define、#ifndef、#ifdef等。VC中通过配置/P参数,告诉编译器输出预编译结果。 配置步骤如下:Project->Settings->C/C++然后编译工程,在工程目录下,就会生成.i后缀的文件,该类文件即为预编译后的结果。...

2021-10-11 11:45:57 1000

原创 如何在VC中调用第三方lib库(step by step)

我们以调用Kvaser的库文件为例。第三方的库一般会提供两个文件,一个是库文件、一个是头文件。Kvaser的库文件为canlib32.lib 、 头文件为canlib.h该库文件里,提供了一个名为canInitializeLibrary的函数,我们只要能调用该函数,即为调用库成功。第一步:我们在CPP文件中,添加头文件及函数调用,如下:#include “stdafx.h”#include <canlib.h>int main(int argc, char* argv[]){c

2021-10-09 10:21:51 1916

原创 error LNK2001: unresolved external symbol “int a“ (?a@@3HA)

TestStatic.obj : error LNK2001: unresolved external symbol “int a” (?a@@3HA)这个问题的根本原因是C文件里使用了变量a,但是没有地方去定义变量a。1.如果是自己定义变量,就查一下,变量在哪个C文件里定义的,把该文件包含到工程里。2.如果是库文件里定义的,要包含一下库文件。步骤如下:Project->Setting->LinkCategory选General 在Object/library modules框里,

2021-10-08 17:09:59 237

原创 error C2065: ‘_beginthread‘ : undeclared identifier

error C2065: ‘_beginthread’ : undeclared identifier首先要包含<process.h>头文件。还报错的话,设置工程参数,如下:Project -> Settings… 中 选C/C++ 的页,然后在Category中选Code Generation 然在它下面的Use run-time libaray 中选Multithreaded(或 Multithreader DLL或 Debug Multithreader DLL 或 Debug

2021-06-27 19:01:38 407 1

kvaser_drivers_setup(qudong).zip

kvaser_drivers_setup(qudong).zip

2021-10-09

VB Socket编程

为数不多的直接调用Winsock API函数,来实现网络编程的资源。如果你感觉到使用VB提过的WinSock控件束手束脚,施展不开。那么本资源会给你最好的答案。 代码中还提过了一个ICom的接口,同过该接口也可以兼容其他的设备。

2015-12-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除