01std_C
文章平均质量分 87
halazi100
勤勉务实、守正创新
展开
-
浮点数探秘
浮点数在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到。原创 2022-07-18 17:30:57 · 924 阅读 · 0 评论 -
C语言深度剖析笔记2
函数类型加*即可直接声明函数指针类型可通过函数类型定义函数指针先定义函数指针类型,在定义函数指针变量也可以直接定义函数指针-`pointer`为函数指针变量名-`type`为指向函数的返回值类型-`parameterlist`为指向函数的参数类型列表typedef是用来定义(重命名)类型的;没有typedef会直接定义一个变量;程序中的声明可理解为预先告诉编译器实体的存在,如类型,变量,函数等等;程序中的定义明确指示编译器实体的意义;声明和定义的不同;变量与,和。......原创 2022-07-18 11:11:24 · 422 阅读 · 0 评论 -
C语言深度剖析笔记1
define定义宏常量可以出现在代码的任何地方;#define从本行开始,之后的代码都可以使用这个宏常量;\cpp\c.ppt\cpp\c.ppt以上宏定义都是没有语法错误的;PATH_3等价于D\cpp\c.ppt宏也可以给一个计算公式起名字;宏可以使用参数表示计算公式中未知的内容,参数的个数没有限制;宏的参数可以代表任何东西,所以宏的参数是没有类型的;带参数的宏是采用二次替换的方式处理的;用来给计算公式起名的宏中不能定义自己的变量;#define#define#define。......原创 2022-07-18 11:10:45 · 587 阅读 · 0 评论 -
C/C++ struct数据对齐补齐
struct成员对齐,总体补齐原创 2022-07-06 15:04:00 · 1571 阅读 · 0 评论 -
Linux系统操作基础
Linux系统操作基础Linux操作系统是一个多用户的操作系统;每一个用户需要使用对应的账号登录后才可以操作;原创 2022-06-13 13:28:45 · 371 阅读 · 0 评论 -
undefined reference to xxx 问题总结
undefined reference to xxx 问题总结GCC编译过程预处理Pre-Processing;宏展开等,可以生成.i文件编译Compiling(狭义的编译);进行语法分析,转换成汇编语言,生成.s文件汇编Assembling;把汇编语言代码转换成目标代码,生成.o文件连接Linking;连接器ld将as创建的目标文件转换为可执行文件,生成a.out文件代码的基本语法与格式错误一般是在前几个阶段被发现的,在最后一步即连接时才会报错 undefined reference原创 2022-03-30 19:15:07 · 1100 阅读 · 0 评论 -
C/C++中枚举值转字符串的技巧
在C、C++中经常需要定义枚举值,或根据枚举值来获取对应的枚举字符串,以下示例巧妙的利用宏的特性来实现,请参考。原创 2022-02-09 14:47:03 · 12656 阅读 · 6 评论 -
C++函数调用栈使用进阶
函数调用栈高级用法当程序运行异常退出时自动打印当前的函数调用栈,便于分析定位问题;设计思路:设计一个C++类 CallStack, 该类封装函数调用栈相关信息的搜集与组装;设计一个C函数 callstack_dump(), 该接口创建一个函数调用栈类实例对象并输出函数调用栈;设计一个信号处理函数 signal_SEGV_handler(int),该接口用于调用上一步的API;使用上一步设计的函数,注册为信号处理函数;模仿android封装一个callstack类CallStack头文件原创 2021-07-20 13:26:05 · 830 阅读 · 0 评论 -
C++中记录并解析函数调用栈callstack
glibc中提供了backtrace()和backtrace_symbols()两个函数来输出和解析程序的call stack,输出程序运行时调用栈信息可以通过命令man backtrace查看具体帮忙信息。#include <execinfo.h>int backtrace(void **buffer, int size);char **backtrace_symbols(void *const *buffer, int size);使用backtrace()函数获取调用栈原创 2021-07-13 15:57:42 · 2770 阅读 · 0 评论 -
使用indent命令格式化统一C语言源代码风格
indent命令可以用来格式化C语言源文件,实现统一的代码风格。如果没有indent命令,可以先安装ubuntu:sudo apt-get install indentindent命令支持定制自己的风格,只需要添加相应的选项即可;具体选项可以使用man indent命令来查看;使用的时候也很简单# indent -选项 C源文件名如# indent-npro -nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli.原创 2020-12-22 16:14:16 · 590 阅读 · 0 评论 -
C语言编程基础-11递归函数变量的生命周期和作用域
递归函数变量的生命周期和作用域全局变量,局部变量,块变量声明变量的关键字递归函数C语言允许嵌套地调用函数,也就是说,在调用一个函数的过程中,又去调用另外的函数;函数的嵌套调用有个特例,即递归调用,也就是说,在调用一个函数的过程中,又出现了直接或间接地调用该函数本身;自己调用自己的函数叫递归函数;递归函数调用会在计算机里面同时存在多个,其中最后一个是当前正...原创 2015-07-22 13:06:35 · 2038 阅读 · 0 评论 -
C语言编程基础-05操作符位操作与运算符优先级
操作符位操作符&操作符*操作符运算符优先级+--------+| 操作符 |+--------+单目操作符+-*/%,=用来编写表达式的符号统称为操作符加减乘除是四则运算符(+,-,*和/)操作符%表示取余操作符操作符,在c语言程序中可以当操作符使用,操作符可以把两个表达式合并成一个,合并后表达式的计算结果是后一个表达式的计算结果,操作符的优...原创 2015-07-22 12:59:31 · 2463 阅读 · 0 评论 -
C语言编程基础-06三目操作类型转换分支循环
三目操作符类型转换分支循环三目操作符可以根据一个布尔值从两个不同的表达式中挑选一个来使用三目表达式的格式如下: 布尔值 ? 表达式1 : 表达式2当布尔值为真时运算表达式1,否则运算表达式2; strcmp(str1, "yes") ? printf("yes\n") : printf("no\n");/** 绝对值练习*/...原创 2015-07-22 13:00:53 · 577 阅读 · 0 评论 -
C语言编程基础-01Linux操作基础
Linux系统操作基础+---------------+| Linux操作基础 |+---------------+iconv -f gb2312 -t utf-8 day01.txt > day01-utf-8.txt该命令将gb2312编码的txt文件转换为utf-8编码的文件后存储到day01-utf-8.txtdos2unix file.txt命原创 2015-07-22 12:55:45 · 628 阅读 · 0 评论 -
C语言编程基础-15结构体 枚举 联合
结构体数据补齐对齐枚举联合结构体可以用来统一存储不同类型的数据; 结构体仅仅是一种数据类型,它本身不占有存储空间; 结构体仅仅描述了多种数据之间的关系,是一种结构信息; 结构体可以用来声明结构体变量,结构体变量实际占有内存空间;声明结构体需要使用 struct 关键字;结构体声明中包含多个变量声明语句,这些语句不会分配存储位置,因此不能在此......原创 2015-07-22 13:10:18 · 717 阅读 · 0 评论 -
C语言编程基础-12指针
指针指针 指针变量是一种特殊的变量,指针变量也对应一个存储位置,这个存储位置记录了另外一个存储位置的地址; 指针变量又根据级别划分成一级指针,二级指针等; 图中左边的指针变量可以表示右边的任何一个存储位置;================================================= _______...原创 2015-07-22 13:07:18 · 779 阅读 · 0 评论 -
C语言编程基础-04占位符与内存结构及sizeof
数据类型与占位符计算机内存结构sizeof关键字二进制+------------------+| 数据类型与占位符 |+------------------+数据类型和占位符之间的对应关系char --- %c和%hhd /* %c用于打印字符身份,%hhd用于数字身份 */unsigned char --- %c和%hhush...原创 2015-07-22 12:58:40 · 1844 阅读 · 0 评论 -
C语言编程基础-08数组
数组一维数组二位数组在C语言中使用数组来表示多个连续的同类型的存储位置;使用数组表示多个连续存储位置的时候只需要一个名字,这个名字就代表所有这些存储位置的整体;每一个存储位置有一个自己的编号,最前边的存储位置的编号是0,向后依次递增,最后一个存储位置的编号是个数-1;这个编号叫下标;绝不可以使用超过范围的下标;如果使用了越界的存储位置结果是未知的,不能保证安全性...原创 2015-07-22 13:02:41 · 857 阅读 · 0 评论 -
C语言编程基础-16动态内存分配 二级指针做形参 函数指针
动态内存分配;二级指针做形参;函数指针;常用标准函数动态内存分配动态内存分配可以在程序运行时随时分配存储位置;动态分配的存储位置一定来自于堆这个段落; 堆中的所有存储位置需要使用语句来完成分配和回收;C语言中提供几个标准函数用来分配和回收堆中的存储位置;为了使用这些标准函数需要包含stdlib.h头文件; 1)malloc()标准函数用来动态...原创 2015-07-22 13:12:05 · 2105 阅读 · 0 评论 -
C语言编程基础-13字符串操作与指针数组
程序的存储字符串操作函数指针数组main()函数的形参程序的存储 程序在内存中是分段存储的;6->栈区 存放局部变量,块变量,形式参数和返回值的存储位置;这个段落的大小随着程序的运行不断改变;每当一个函数调用出现时就从这个段落中分配一段空间来记录它自己的变量;当函数调用结束时它所分配的空间被计算机回收;不同函数调用的空间遵循后进先出的原则;5-...原创 2015-07-22 13:08:37 · 1375 阅读 · 0 评论 -
C语言编程基础-14宏操作 多文件编程
文件位置指针宏操作多文件编程文件位置指针文件位置指针用来记录下一次文件操作的开始位置;这个指针用来记录一个整数,这个整数表示这个位置到文件头的距离;文件位置指针会随着文件的读写操作而移动;可以使用标准函数修改位置指针的数值;ftell()标准函数可以得到位置指针的数值;rewind()标准函数可以把文件位置指针调整到文件开头;fseek()标准函数可以把...原创 2015-07-22 13:09:30 · 2919 阅读 · 0 评论 -
C语言编程基础-10函数形参数组做形参文件操作
函数形参数组做形参文件操作函数函数形参形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又被销毁;形式参数只有在函数调用期间才可以使用;使用普通变量作为形式参数只能传递数据不能传递存储位置;被调函数如果修改了普通变量形参对其他函数没有任何影响;如果声明被调用函数时小括号()内是空的,表示函数可以接受任意个数任意类型的形参;如果想表示函数没有任...原创 2015-07-22 13:04:52 · 3360 阅读 · 0 评论 -
C语言编程基础-02Linux系统进程与重定向
链接文件,文件属性系统进程,重定向原创 2015-07-22 12:56:43 · 1033 阅读 · 0 评论 -
C语言编程基础-09函数与返回值及形参
函数返回值形参实参函数在大规模的程序中需要对语句进行分组管理,把相互之间联系比较紧密的语句合并成一组;分组可以在多个不同层次上进行,最低一级分组的结果叫代码块,代码块由{}大括号包括;在大括号前面添加 类型名 函数名()的就是函数;函数的形式如void func() { do something;}任何函数一定包含若干条语句;...原创 2015-07-22 13:03:38 · 2006 阅读 · 0 评论 -
c语言打印调用栈及解析
#include <execinfo.h>int backtrace(void **buffer, int size);char **backtrace_symbols(void *const *buffer, int size);void backtrace_symbols_fd(void *const *buffer, int size, int fd);代码示例...原创 2017-10-22 21:08:12 · 14498 阅读 · 2 评论 -
C++中backtrace打印函数调用栈callstack-dbg_assert
1. 使用backtrace()函数获取调用栈,是一个指针数组,返回获取到的调用栈个数,结果放到传入的指针数组里面;2. 调用backtrace_symbols()把获取的指针数组和数组中调用栈个数传递给该函数,会返回一个新的指针数组, 里面是已经转换成符号表的调用栈信息;用完后记得需要free返回的指针变量指向的内存空间;使用这两个函数需要包含execinfo.h头文件;下面把这个...原创 2018-11-13 22:19:16 · 5444 阅读 · 0 评论 -
12-bit_operation
位运算符在C语言中的位运算符 & 按位与 | 按位或 ^ 按位亦或 >> 右移 ~ 按位取反(单目运算符)结合律 a&b&c (a&b)&c a&(b&c)交换律 a&b b&a左移和右移注意点左移运算符右移运算符>>把运算数的二进制位右移,高位补符号位,低位丢弃;原创 2015-05-26 10:47:36 · 419 阅读 · 0 评论 -
C语言编程基础-03变量与数据类型
变量赋值scanf()数据类型+------+| 变量 |+------+计算机的内存可以用来记录数据;计算机的内存可以分成很多存储位置,每个存储位置可以用来记录一个数字;在C语言程序中可以使用这些存储位置,前提条件是计算机把某个位置分配给了我们的程序;在C语言程序中通过变量可以使用一个存储位置;存储位置是分类型的,一个存储位置只能用来记录某种类型的...原创 2015-07-22 12:57:43 · 828 阅读 · 0 评论 -
C语言编程基础-07break continue for循环 while循环
break;continue;for循环while循环在循环中可以使用 break 语句随时终止循环的执行;执行 break 语句后所在循环终止,循环变量也不会再改变,所以采用这种方式结束循环时逻辑表达式的计算结果仍然是真;可以通过判断循环变量的真假来判断循环是否正常结束的;#include int main() { int num = 0;...原创 2015-07-22 13:01:50 · 1526 阅读 · 0 评论 -
17-conditional_compilation
条件编译条件编译的行为类似于C语言中的if...else条件编译是预编译指示命令,用于控制是否编译某段代码/* #define C 1 */int main() { #if (C == 1) printf("This is 1st printf ...\n"); #else printf("This is 2nd prin原创 2015-05-26 10:51:04 · 423 阅读 · 0 评论 -
10-quotation
单引号与双引号#include int main(){ char* p1 = 1 ; char* p2 = '1'; char* p3 = "1"; printf("%s, %s, %s", p1, p2, p3); //段错误 printf('\n'); //段错误; printf("\n"); return原创 2015-05-26 10:45:12 · 411 阅读 · 0 评论 -
16-macro
宏定义宏常量#define定义宏常量可以出现在代码的任何地方;#define从本行开始,之后的代码都可以使用这个宏常量#define ERROR -1#define PI 3.14#define PATH_0 "D:\delphi\c.ppt"#define PATH_1 D:\delphi\c.ppt#define PATH_3 D原创 2015-05-26 10:50:08 · 423 阅读 · 0 评论 -
11-logical_operation_symbol
逻辑运算符使用逻辑运算符&&,||和!#include int main() { int i = 0; int j = 0; if ( ++i > 0 || ++j > 0 ) { printf("%d\n", i); //1 printf("%d\n", j); //0 } return 0原创 2015-05-26 10:48:30 · 408 阅读 · 0 评论 -
09-slash_backslash
续行符C语言中的续行符(\)是指示编译器行为的利器#def\ine MAX\255int main(){/\这是\\注释i\n\t\ *\ p\= \ NULL;printf("%0X\n", p);return 0;}续行符的使用编译器会将反斜杠后面的字符自动接到前一行在接续单词时,反原创 2015-05-26 10:41:14 · 463 阅读 · 0 评论 -
C语言深度剖析
//////////////////////////////////////////////01. basic_data_type//////////////////////////////////////////////关键字的秘密数据类型什么是数据类型数据类型可以理解为固定内存大小的别名;数据类型是创建变量的,模子->花形的圆形的星形的等等;char 1原创 2015-06-24 14:03:29 · 825 阅读 · 0 评论 -
indent工具自动统一格式化代码风格
indent工具自动统一代码风格:indent -gnu style.c -o style_gnu.c //变成gnu风格indent -kr -i8 style.c -o style_kernel.c //变成内核风格两大风格:GNU编程风格->http原创 2015-05-28 14:10:08 · 2037 阅读 · 0 评论 -
akari.c
高手无招胜有招奖项:Best of Show功能:处理三种文件格式(PGM、PPM和ASCII Art)的降采样工具作者:Google华裔工程师Don Hsi-Yun Yang akari.c /* +转载 2015-05-20 19:41:01 · 588 阅读 · 0 评论 -
如何自动生成makefile
GNU make允许将一个软件项目的代码分开放在不同的源文件里,有改动的时候可以只对改动的文件重新编译,然后重新连接,这种编译管理方法提高了生成目标的效率。make要调用一个makefile文件来实现。Makefile的编写是使用make的关键问题。当工程里面包含的很多源文件,库,文件放在不同的子目录时,手动书写makefile文件不方便且容易出错。一般情况下我们用autoconf和autom转载 2015-05-07 17:37:27 · 447 阅读 · 0 评论 -
程序变量命名法:匈牙利命名、驼峰式、帕斯卡命名法
一、匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中。 Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。 匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺转载 2014-11-27 14:09:26 · 1926 阅读 · 0 评论 -
内存泄漏与内存溢出
内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄露了。原创 2014-11-27 15:28:12 · 538 阅读 · 0 评论