当我们在命令行输出字符的时候,会想着,要是能控制输出字符的颜色就好了。现在,满足你,有这么一个函数能够帮助我们实现这个想法。↓↓↓↓↓SetConsoleTextAttribute();依照惯例我们来看看这个函数的构成。SetConsoleTextAttribute(_In_HANDLEhConsoleOutput,_In_WORDwAttributes);HANDLE在上一篇博客中我们见过。注意在使用前,要先将其变为标准输出句柄。typedefvoid*HANDLE;//HANDLE是vodi*的重定义HANDLEhOut=G...
继续阅读 >
分类:c
2021
03-05
03-05
C++ RTTI与4种类型转换的深入理解
前言RTTI是RunTimeTypeInformation的缩写,从字面上来理解就是执行时期的类型信息,其重要作用就是动态判别执行时期的类型。并不是说这篇文章是RTTI,和用于RTTI的四种类型转换,而是介绍RTTI,再介绍一下4种类型转换,因为RTTI有用到其中一种类型转换,所以相当于两篇文章写在一起。实际上RTTI用到的是typeid()和dynamic_cast()。为什么会有RTTI?C++是一种静态类型语言,其数据类型是在编译期就确定的,不能在运行时更...
继续阅读 >
2021
03-05
03-05
C++中4种强制类型转换的区别详析
前言C++即支持C风格的类型转换,又有自己风格的类型转换。C风格的转换格式很简单,但是有不少缺点的:1.转换太过随意,可以在任意类型之间转换。你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些。2.C风格的转换没有统一的关键字和标示符。对于大型系统,做代码排查时容易...
继续阅读 >
2020
12-10
12-10
在C/C++项目中合理使用宏详解
C++项目中常使用宏来做跨平台、功能实现隔离、变量定义的功能,这篇文章来讨论下是否所有情况下都适合用宏小D的故事程序员小D接到一个任务,需要给同事A提供一个复杂公式的实现。输入为一组参数,输出一个计算结果。大致如下:doublecomputeSomeThing(doubleparamA,doubleparamB,doubleparamC);小D很快完成了。过了几天同事A又来找他,说现在需要提升该函数的性能,建议改为在float类型上,用一些SIMD指令。且同事A表示不是很...
继续阅读 >
2020
12-10
12-10
c/c++ 利用sscanf进行数据拆分操作
sscanf使用示例示例:使用sscanf分割文件中的数据,数据源示例如下川EZ1E58,贵GQ7708,:1302贵AE0996,:185贵A0PJ06,贵JYN192,贵JYN192,:128分割代码如下所示:#include<stdio.h>#include<string.h>intDealLine(char*StrLine){//find:datasavecharParkid[20]="";char*p=StrLine;char*prt=StrLine;charcarNum[20]="";if(p=strstr(p,":")){p=p+1;strncpy(Parkid,p,20);printf("Parkid==%s",Park...
继续阅读 >
2020
12-10
12-10
C/C++中memset,memcpy的使用及fill对数组的操作
对数组的整体赋值,以及两个数组间的复制容易出错,这里使用string头文件中的memset和memcpy进行不必遍历数组,速度快。之前没有头文件,显示decla头文件:代码:/*Project:数组的整体赋值与复制Date:2018/07/31Author:FrankYumemset(数组名,0或-1,字节)memcpy(数组名,数组名,字节)*/#include<iostream>#include<cstring>//memset需要头文件#include<cstdio>#definen5usingnamespacestd;intmain(){inta[n];int...
继续阅读 >
2020
11-06
11-06
利用C#9.0新语法如何提升if语句美感
前言C#语言一贯秉承简洁优美的宗旨,每次升级都会带来一些语法糖,让我们可以使代码变得更简洁。本文分享两个使用C#9.0提升if语句美感的技巧示例。使用属性模式代替IsNullOrEmpty在任何你使用IsNullOrEmpty的时候,可以考虑这样替换:string?hello="helloworld";hello=null;//旧的方式if(!string.IsNullOrEmpty(hello)){Console.WriteLine($"{hello}has{hello.Length}letters.");}//新的方式if(hello...
继续阅读 >
2020
11-04
11-04
C 语言实现一个简单的 web 服务器的原理解析
说到web服务器想必大多数人首先想到的协议是http,那么http之下则是tcp,本篇文章将通过tcp来实现一个简单的web服务器。本篇文章将着重讲解如何实现,对于http与tcp的概念本篇将不过多讲解。一、了解Socket及web服务工作原理既然是基于tcp实现web服务器,很多学习C语言的小伙伴可能会很快的想到套接字socket。socket是一个较为抽象的通信进程,或者说是主机与主机进行信息交互的一种抽象。socket可以将...
继续阅读 >
2020
10-10
10-10
python与c语言的语法有哪些不一样的
python与C的区别如下:1、语言类型不同。Python是一种动态类型语言,又是强类型语言。它们确定一个变量的类型是在您第一次给它赋值的时候。C是静态类型语言,一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。2、对象机制不同。Python中所有的数据,都是由对象或者对象之间的关系表示的,函数是对象,字符串是对象,每个东西都是对象的概念。每一个对象都有三种...
继续阅读 >
2020
10-08
10-08
C语言字符串转换为Python字符串的方法
问题怎样将C中的字符串转换为Python字节或一个字符串对象?解决方案C字符串使用一对char*和int来表示,你需要决定字符串到底是用一个原始字节字符串还是一个Unicode字符串来表示。字节对象可以像下面这样使用Py_BuildValue()来构建:char*s;/*PointertoCstringdata*/intlen;/*Lengthofdata*//*Makeabytesobject*/PyObject*obj=Py_BuildValue("y#",s,len);如果你要创建一个Unicode字符串,并且你...
继续阅读 >
2020
10-08
10-08
详解C语言和Python中的线程混用
问题你有一个程序需要混合使用C、Python和线程,有些线程是在C中创建的,超出了Python解释器的控制范围。并且一些线程还使用了PythonCAPI中的函数。解决方案如果你想将C、Python和线程混合在一起,你需要确保正确的初始化和管理Python的全局解释器锁(GIL)。要想这样做,可以将下列代码放到你的C代码中并确保它在任何线程被创建之前被调用。#include<Python.h>...if(!PyEval_ThreadsInitialized()){PyEval_InitThread...
继续阅读 >
2020
10-08
10-08
C语言调用Python代码的方法
问题你想在C中安全的执行某个Python调用并返回结果给C。例如,你想在C语言中使用某个Python函数作为一个回调。解决方案在C语言中调用Python非常简单,不过涉及到一些小窍门。下面的C代码告诉你怎样安全的调用:#include<Python.h>/*Executefunc(x,y)inthePythoninterpreter.TheargumentsandreturnresultofthefunctionmustbePythonfloats*/doublecall_func(PyObject*func,doublex,doubley){PyObject*a...
继续阅读 >
2020
10-08
10-08
Rust 能够取代 C 语言吗
Rust是Mozilla基金会的一个雄心勃勃的项目,号称是C语言和C++的继任者。一直以来,C/C++中的一些基本问题都没能得到解决,比如分段错误、手动内存管理、内存泄漏风险和不可预测的编译器行为。Rust的诞生就是为了解决这些问题,并提高安全性和性能。Evrone(一家软件公司)在很多项目中使用了Rust,我们的工程师们这方面在积累了丰富的经验。在这篇文章中,我们将分享Rust的一些主要特性。主要特性强静态类型;无垃圾回...
继续阅读 >
2020
10-08
10-08
详解C语言进程同步机制
本文是对进程同步机制的一个大总结(9000+字吐血总结),涵盖面非常的全,包括了进程同步的一些概念、软件同步机制、硬件同步机制、信号量机制和管程机制,对每种机制结合代码做了详细的介绍,并且对琐碎的知识点和概念解释的非常清晰。在前面的博客中讲述了进程的状态及其状态的转换,每种状态的含义和转换的原因。同样我们也知道,在OS引入了进程后,可以使系统中的多道程序可以并发的执行,进程的并发执行一方面极大的...
继续阅读 >
2020
10-07
10-07
C 语言关于联合体的相关知识
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在CProgrammingLanguage一书中对于联合体是这么描述的: 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员; 4)其对齐方式要适合其中所有的成员;下面解...
继续阅读 >
2020
10-07
10-07
详解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别第一种内存模型char*arr[]若有如下定义char*arr[]={"abc","def","ghi"};这种模型为二级指针的第一种内存模型,在理解的时候应该这样理解:定义了一个指针数组(char*[]),数组的每个元素都是一个地址。在使用的时候,若要使用中间量操作元素,那么此时中间量应该定义为char*tmp=NULL;如果要打印这个数...
继续阅读 >