随笔分类 - C
摘要:1. C语言函数的调用方式 _cdecl 调用 _cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈所以在函数调用栈中, 越右边的参数在栈的越低端,既内存地址越大。 2.实现 函数
阅读全文
摘要:C语言中将变量名转换成字符串使用的是#符号,来看下边两个宏定义: 使用的时候自动将相应的变量名转换成字符串,示例代码: 输出内容: 原文链接: https://blog.csdn.net/Veabol/article/details/76491792
阅读全文
摘要:编译链接是使用高级语言编程所必须的操作,一个源程序只有经过编译、链接操作以后才可以变成计算机可以理解并执行的二进制可执行文件。 编译是指根据用户写的源程序代码,经过词法和语法分析,将高级语言编写的代码转变为功能有效的汇编代码。 编译过程如下: 1、 预编译过程 在c语言的预编译过程中,主要是对宏定义
阅读全文
摘要:1.char *b = const char *a 会报警告,而const char* a = char *b不会,要使这种赋值形式合法,必须满足下列条件之一: 1)两个操作数都是指向有限定符或无限定符的相容类型的指针 2)左边指针指向的类型必须具有右边指针所指向类型的全部限定符 警告内容:init
阅读全文
摘要:如果能够让(unsigned long)(&(type))的值为0,即&(type) == 0的时候,那么offset的值就是简单的: 如果说&(type) == 0,那么type.c就可以等价于((Type_t *)0)->c。 但是这个语句是不能单独存在的,因为对NULL指针访问成员c是非法的。
阅读全文
摘要:利用一个数组,记录每个字符串的个数,另一个flag数组标记已经计数过的字符串
阅读全文
摘要:在设计函数过程中,想要函数参数传入一个指针数组,多为字符串数组,在函数形参的设计上有两种思路,具体以下列两种应用场景为说明 一、字符串处理函数strsort 从程序设计角度来看,将多个字符串传递给函数处理时,因为传递的是一维数组,形参的定义比较简单。例如,函数strsort()可对多个字符串进行排序
阅读全文
摘要:1. #error 的用法 (1)#error 是一种预编译器指示字,用于生成一个编译错误消息 (2)用法:#error message //注意:message 不需要用双引号包围 (3)#error 编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning 用于生成编译警告消息 (
阅读全文
摘要:在Visual Studio2008中编写如下代码: 编译器会对 cout << MODI + 1 << endl;这行语句报错。 原因就是#undef起的作用: 当用完一个宏,比如MODI,不希望下面的代码再用到这个MODI,,那么就可以#undef它,那么下面如果再用到了MODI这个宏,编译器就
阅读全文
摘要:main函数中的第一个参数argc代表的是向main函数传递的参数个数,第二个参数argv数组代表执行的程序名称和执行程序时输入的参数 这里注意argc的大小比实际输入的参数大1,因为argv[0]保存的是程序的运行目录和程序名 测试结果:文件名为argv
阅读全文
摘要:1.结构体数组中对属性的初始化可以用“.feature”的形式来初始化 2.一个结构体元素中属性间用逗号“,”
阅读全文
摘要:经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器。特别是在代码经过编译器一些比较复杂的优化后,会变得“难以辨认”,使用调试器也变得有些头疼。先举个简单的例子: 如果采用gcc(笔者的版本是4.7.3)编译,使
阅读全文
摘要:文章转自 循环冗余校验(CRC)算法入门引导 - Ivan 的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyuanbhu/article/details/7882789 一、原理部分 CRC 算法的基本思想是将传输的数据当做一个位数很长的数,将这个数除以另
阅读全文
摘要:一般的来说,函数是可以返回局部变量的,但是要注意几种情况。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的
阅读全文
摘要:什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 CRC校验原理
阅读全文
摘要:在linux socket网络编程中,大规模并发TCP或UDP连接时,经常会用到端口复用: int opt = 1; int opt = 1; if(setsockopt(sockfd, SOL_SOCKET,SO_REUSEADDR, (const void *) &opt, sizeof(opt
阅读全文
摘要:socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出一个功能调用时,在没有得到结果之
阅读全文
摘要:在TCP连接中,recv等函数默认为阻塞模式(block),即直到有数据到来之前函数不会返回,而我们有时则需要一种超时机制使其在一定时间后返回而不管是否有数据到来,这里我们就会用到setsockopt()函数: int setsockopt(int s, int level, int optname
阅读全文
摘要:select函数的作用: 在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在这里,无法执行下面的代码。这是就需要用到非阻塞的编程方式,使用selcet函数就可以实现非阻塞编程。selce
阅读全文
摘要:介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器
阅读全文
浙公网安备 33010602011771号