
C语言
文章平均质量分 66
lengye7
这个作者很懒,什么都没留下…
展开
-
gcc或clang更改函数入口点
gcc和clang编译器都是支持的自定义入口点的,用户可以通过-e选项来指定自定义的入口点。或就可以编译成功:但是,如果执行test程序,就会出现段错误,这是因为我们没有初始化标准输入输出,而printf函数需要使用标准输入和输出,因为访问了不存在的资源,所以就导致了段错误。根据参考一中的内容可知,gcc默认的入口点_start函数在调用main函数之前,会先做一系列的初始化工作,以确保main函数所需的资源准备好。原创 2023-05-02 01:32:55 · 1533 阅读 · 1 评论 -
不同平台的C/C++标准库
程序员们在特定的操作系统上(MAC、Windows、Linux等),利用特定的IDE(Xcode、Clion、Visual Studio等)或者文本编辑器(VSCode、Sublime等)完成C/C++源代码的编写,然后利用特定的编译器对源代码进行编译,链接对应的标准库,生成可执行程序,完成特定的软件功能。标准库新增的功能,标准库一般是我们学习编程的起点,无论是std::cout()或者printf()函数都是标准库中的函数,标准库为我们提供了丰富的操作系统底层系统软、硬件系统相关的函数接口。转载 2023-01-26 20:35:15 · 2523 阅读 · 0 评论 -
AOT和JIT
一个程序的编译过程可以是步骤迭代式的,即每一轮步骤结束后得到的结果都可独立运行,比如,先构造AST再输出字节码,中间状态AST也是可以解释执行的。由于编译的本质就是代码转换,因此对一个语言可以有多个独立的编译器,每个负责一轮步骤AOT Compiler和JIT Compiler就是针对编译形式做的分类:AOT:Ahead Of Time,指在运行前编译,比如普通的静态编译JIT:Ju...转载 2019-07-10 10:01:32 · 1017 阅读 · 0 评论 -
C预处理器简介
Cpreprocesser,简称cpp,是C编译器在编译源码之前用于转换代码的宏处理器。之所以称之为宏处理器,是因为通过cpp,你可以在程序中定义和使用宏。cpp是一种文本处理工具,因此也可以用于C、C++和Objective-C之外的源码。初始处理cpp的作用是对输入的文件做一系列的文本处理,这些文字处理是最先进行的。理论上,预处理中的各个操作的执行是有严格的顺序,但实际上GNU的CPP...转载 2019-07-10 00:34:37 · 1269 阅读 · 0 评论 -
C语言的主要运算符及其优先级
运算符优先级自上而下,依次降低()括号运算 []数组下标 ->结构体成员指针 .点运算符 这几个运算符同时出现,从左至右依次计算!逻辑反 ~按位取反 ++自增 --自减 -负号 (type)类型强制转换 &取地址 *解地址 sizeof运算符 从右向左依次计算* / % + - 四则取余运算 ...原创 2019-07-08 18:13:02 · 472 阅读 · 0 评论 -
C语言的类型
C语言主要有以下几种类型:1、整型2、浮点型3、字符类型(包括了字符串)4、函数类型5、派生类型6、复合类型对于整型来说主要分为无符号整型和有符号整型,默认声明有符号整型。首先介绍无符号整型:unsigned char:1字节unsigned shrot:通常是2字节unsinged int:通常是4字节unsinged long:通常是8字节...原创 2019-07-07 23:18:23 · 9694 阅读 · 0 评论 -
C 语言的注释
C语言有两种注释第一种:/* 这是一个经典注释,C89标准引入*/第二种://这是一个单行注释,C99标准引入关于第一种注释的主要注意点:第一种注释不能嵌套就近匹配原则:/* 这是一个多行的著述 /*嵌套注释*/*/上面这个注释会报错,因为C语言的经典注释符号遵循就近匹配原则,第一行/*会和第二行的*/进行匹配,形成一个完整的经典注...原创 2019-07-07 12:00:09 · 8522 阅读 · 0 评论 -
C语言中的incomplete type
不完整类型是一种用于描述标识符而无法确认该描述符大小的类型。如一个类只有声明没有定义,一个数组没有指定大小等。还有一种情况就是类有定义,但是所在头文件没有被包含文件A中,仅仅在A中声明了,也属于不完整类型。在编码过程中可以利用“无法确认该描述符大小”的特点来保证代码安全,如typedef char T_must_be_comlete_type[(0 == sizeof(T) ?...转载 2019-07-06 11:21:19 · 9370 阅读 · 0 评论 -
C语言文档中的no linkage理解
no linkage:对于在两个不同地方声明的同名标识符,他们不是指向同一实体,而是指向各自的实体。那么哪些标识符是no linkage的呢?除了变量和函数之外的其他任何标识符和处于块作用域内的同名变量但是没有使用extern修饰的变量。这些标识符都始终指向独自唯一的那个实体。...原创 2019-07-05 01:01:23 · 3920 阅读 · 0 评论 -
Cygwin库从GPL改为LGPL许可证
Red Hat的Cygwin Team宣布,Cygwin库的下一个版本 2.5.2版将采用LGPL v3许可证。Cygwin库是Cygwin项目的核心组件,目标使Linux下程序更容易运行在Windows平台上。之前Cygwin库使用的是GPL开源许可,改变为更宽松的LGPL后,会带来更多的商业机会。Cygwin 包含成千上百个开源包,包括大多数GNU工具包,X server等。...转载 2019-07-04 12:41:05 · 313 阅读 · 0 评论 -
Mingw、Mingw-w64、msys、msys2、Cygwin等总结
Mingw包含一个c运行库,以及windows的头文件,同时包含了一些编译器工具链,能够将编译windows程序生成windows的32位可执行文件。Mingw-w64是从Mingw衍生而来,能够生成32和64位的windows可执行文件。msys是上面两个的一个集成环境,工具链更加完善。msys2与msys不同,msys集成了Mingw和Cygwin这两个,同时包含一个包管理工具,包...原创 2019-07-03 21:43:45 · 6967 阅读 · 0 评论 -
MinGW MinGW-w64 TDM-GCC等工具链之间的区别与联系
不当之处,尽请指正。相同点:一、 他们都是用于编译生成Windows应用程序的工具链。二、 他们都是基于gcc的。不同之处(只说大的):一、项目之间的关系1. MinGW应该是最先诞生的。2. MinGW-w64项目最初是做为MinGW的一个分支而诞生,但现在已经独立发展。详细信息参见:http://sourceforge.net/apps/trac/mingw-w...转载 2019-07-03 12:48:01 · 1215 阅读 · 0 评论 -
MinGW详细介绍
MinGW官网MinGW,是MinimalistGNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runti...转载 2019-07-03 12:18:34 · 8203 阅读 · 0 评论 -
linux与windows交叉编译
1.简述这篇文章主要说明的是将linux上编译的程序放到windows上运行。2.操作方法2.1 下载必备的交叉编译软件首先,我的主机与虚拟机都是64位的,虚拟机为ubuntu。$ sudo apt-get install mingw-w642.2 编写程序编写一个简单的测试程序:#include <stdio.h>int main(int argc,cha...转载 2019-07-02 20:54:57 · 4069 阅读 · 0 评论 -
libcurl 探索之旅:libcurl 分别在 Unix 环境和 Windows 环境下的编译与使用
一、引言因为工作的原因,加上自己的一点点兴趣爱好,今天花了一整天的时间去探索和学习 libcurl。libcurl 的文档是非常齐全的,并且在获取到了源代码之后,里面的代码、文档、工具等等都是非常完善的。可是对于新人来说,想要从这么复杂多样的文档中摸索出来适合自己入门的方向,实在是有些困难。这篇博客,就是想要给同样深陷于 libcurl 复杂的文档中不能自拔的程序员同僚们一条我自己走出来的...转载 2019-07-02 17:47:53 · 404 阅读 · 0 评论 -
MinGW到底是个什么ghost
MinGW到底是个什么ghost0.什么是MinGWMinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合...转载 2019-07-02 17:40:43 · 750 阅读 · 0 评论 -
MSYS2 环境搭建,并整合Qt
本机环境:Windows XP 32位MSYS2地址:http://sourceforge.net/projects/msys2/下载32位版本,地址:http://sourceforge.net/projects/msys2/files/Base/i686/当前压缩包名称:msys2-base-i686-20131208.tar.xz安装完之后,运行目录下的mingw32_shell.b...转载 2019-07-02 03:54:05 · 1250 阅读 · 0 评论 -
用GPG保卫你的重要文件-GnuPG/Gpg4win使用说明
GnuPG官网:https://www.gnupg.org/Gpg4win官网:https://www.gpg4win.org/GnuPG教程:官方中文帮助:https://www.gnupg.org/howtos/zh/GPGMiniHowto-1.html月光博客写的教程:使用GnuPG(PGP)加密信息及数字签名教程阮一峰的网络日志:GPG入门教程 - 阮一峰的网络...转载 2019-07-02 02:23:43 · 804 阅读 · 0 评论 -
glib 简介
glib 简介编译 编译 简介glib 可调试/configure CFLAGS=-g && make && make installormake CFLAGS=-g 简介原文地址:http://laiyuanyuan7.blog.163.com/blog/static/1527432120112104428...转载 2019-07-01 21:05:30 · 2636 阅读 · 0 评论 -
libc、glibc和glib的关系
转自:http://my.oschina.net/moooofly/blog/126260http://nieyong.github.io/wiki_ny/glibc,%20eglibc%E5%92%8C%20glib%E7%9A%84%E5%8C%BA%E5%88%AB.html【glibc 和 libc】glibc 和 libc 都是 Linux 下的 C 函数库。l...转载 2019-07-01 20:15:05 · 4624 阅读 · 0 评论 -
C语言标准6.2.4/5/6阅读笔记
5 For such an object that does not have a variable length array type, its lifetime extendsfrom entry into the block with which it is associated until execution of that block ends inany way. (Enterin...原创 2019-04-26 00:15:14 · 292 阅读 · 0 评论 -
stderr和stdout详细解说
<cstdio>objectstderrFILE * stderr;Standard error streamThe standard error stream is the defaultdestination for error messages and other diagnostic warnings. Like stdout, itis usually a...转载 2019-04-09 21:04:18 · 5418 阅读 · 0 评论 -
【C/C++】合理使用goto的若干场景
2018.02.22更新即使如此,能不用还是不要用!!!个人经验goto在一些特定场景下合理使用,不仅不会导致代码可读性和可维护性变差,反而会更容易理解和维护。场景一、多层循环跳出while(A){ ... while(B) { ... if(C) { ... ...转载 2019-03-15 21:20:53 · 308 阅读 · 0 评论 -
有符号数和无符号数
写在正文的前面:终于在四十多岁的时候,干自己喜欢干的事情了。博客中所有文章都是原创,转载注明!!!专题:汇编语言中有符号数还是无符号数?一、汇编语言在存储方面讲,有符号数和无符号数存储形式是一致的。l 数据在内存或CPU的寄存器中都是按照有符号数的二进制补码方式存储的。 例如(在debug中测试): mov ax,-9 怎么理解这个代码...转载 2018-10-01 22:31:55 · 2471 阅读 · 0 评论 -
转载:Freestanding C与交叉编译器的生成原理分析
0 问题由来以前也用过C51写过简单的裸机程序,但是并没有认真的考虑过其与Linux环境下一般C语言程序的不同,只是想当然地认为C是跨平台的语言,并没有考虑过C语言的标准问题。今天在编译GCC交叉编译器时,遇到了种种问题,不得不重新考虑C语言的实现标准,否则很难清晰的了解交叉编译器的编译过程。1 C编译器的两种实现要求C语言标准的正式文档中明确提出了C编译器的两种实现标准:1....转载 2018-09-15 15:45:47 · 466 阅读 · 0 评论 -
转载:GCC源码分析(五)——指令生成
一、前言 又有好久没写了,的确很忙。前篇介绍了GCC的pass格局,它是GCC中间语言部分的核心架构,也是贯穿整个编译流程的核心。在完成优化处理之后,GCC必须做的最后一步就是生成最后的编译结果,通常情况下就是汇编文件(文本或者二进制并不重要)。 前面也讲到了,GCC中间语言的核心数据结构是GENERIC、GIMPLE和RTL。其中的RTL就是和指令紧密相关的一种结构,它是指令生成的起...转载 2018-09-15 12:33:14 · 907 阅读 · 0 评论 -
转载:GCC源码分析(四)——优化
一、前言本篇只介绍一下框架,就不具体介绍每个步骤了。 二、Pass框架上一篇已经讲了gcc的中间语言的表现形式。gcc 对中间语言的每一步处理叫做一个pass。从一个函数的GENERIC树刚被转换为GIMPLE之后,接下来的工作就由一连串的pass来完成。这些pass环环相扣,最终完成整个程序的优化工作,为目标代码生成做最后的准备。GCC的pass结构定义在gcc/tree-p...转载 2018-09-15 12:32:11 · 649 阅读 · 0 评论 -
转载:GCC源码分析(三)——中间语言
一、前言 很忙,很久没更新博客了,继续没写完的gcc分析,争取在传说将要用C++重写的gcc 5出来之前初略分析完。二、符号表(GENERIC) 前篇介绍了gcc的语法分析,在语法分析过程中,所有识别出来的语言部件都用一个叫TREE的变量保存着。这个TREE就是gcc语法树,叫做GENERIC。实际上它也是gcc的符号表,因为变量名、类型等等这些信息都由TREE关联起来。 G...转载 2018-09-15 12:31:34 · 1164 阅读 · 0 评论 -
转载:GCC源码分析(二)——前端
从这一篇开始,我们将从源代码的角度来分析GCC如何完成对C语言源文件的处理。GCC的内部构架在GCC Internals(搜“gccint.pdf”,或者见[1])里已经讲述得很详细了,但是如果你只看了gccint就来看代码,还是觉得一头雾水,无法下手,因为你很难把gccint所讲的概念同gcc代码里真实的数据结构联系起来。那么这也是我把我这半年的分析经理写下来的原因,大家可以参照gccint来...转载 2018-09-15 12:30:55 · 473 阅读 · 0 评论 -
源文件字符集,编译器内部字符集,执行字符集,控制台乱码问题,Qt中文问题
转载自:https://blog.csdn.net/a10929/article/details/78235793源文件字符集:源文件本身也是文本文件,所以源文件字符集是指源文件保存时采用哪种字符集编码。VC++下源文件默认是gbk编码,如果想要更改,可以通过 文件-高级保存选项 修改某个源文件的编码方式,似乎没有什么选项能够设置创建项目时的源文件编码,需要自己一个一个设。 编译器字符集:编...转载 2018-09-14 14:56:41 · 892 阅读 · 0 评论 -
c预言中的trigraph,及三字母字符
C语言中鲜为人知的“三字母词” (trigraph sequences)2010年12月17日 14:57:00 daheiantian 阅读数:6639 标签: 语言c编译器standardsdeletepointers 更多个人分类: CTechnorati 标签: C语言,三字母词,trigraph sequences,三联符序列,C99,ANSI C 在AN...转载 2018-09-13 14:11:54 · 453 阅读 · 0 评论 -
c语言标准文档阅读
C语言中的若干术语理解和记录 Access(执行的时候的一个action)用于读取和修改object Argument实参,函数或者宏函数调用的使用,所传入的实际参数。 BehaviorAppearance和action Implementation-defined behavior这是由具体的实现(编译器)自己决定的一些行为,标准并不做出规定。...原创 2018-09-10 22:34:39 · 1985 阅读 · 0 评论 -
Libcurl的一些基本介绍
本文转载自 C++ 用libcurl库进行http通讯网络编程 作者:绿色冰点目录一、LibCurl基本编程框架二、一些基本的函数三、curl_easy_setopt函数部分选项介绍四、curl_easy_perform 函数说明(error 状态码)五、libcurl使用的HTTP消息头六、获取http应答头信息七、多线程问题八、什么时候libcurl无法正常工作九、关于密码十、HTTP验证...转载 2018-06-23 13:21:39 · 984 阅读 · 0 评论 -
libcurl库的http部分介绍
LibCurl HTTP部分详细介绍目录索引:一、LibCurl基本编程框架二、一些基本的函数三、curl_easy_setopt函数部分选项介绍四、curl_easy_perform 函数说明(error 状态码)五、libcurl使用的HTTP消息头六、获取http应答头信息七、多线程问题八、什么时候libcurl无法正常工作九、关于密码十、HTTP验证十一、代码示例 ...转载 2018-06-23 12:15:31 · 1738 阅读 · 0 评论 -
c99相对于c89的区别,新增的内容以及废除的内容
由于c99相对于c89有一些废除内容,所以c99并不兼容c89.以下为c99相对于c89的改动。 1、增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的...转载 2018-05-09 16:43:37 · 806 阅读 · 0 评论 -
c语言各个版本的简单介绍
ANSI C与C89、C99、C11区别差异不同版本标准差异总结(图片来源:http://www.crifan.com/summary_c_language_version_c89_amd1_c99_c11):以下为转载:【K&R C】 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版...转载 2018-05-09 16:38:39 · 18434 阅读 · 0 评论 -
关于c99标准6.2.2中的第四点的理解
For an identifier declared with the storage-class specifier extern in a scope in which a prior declaration of that identifier is visible,23) if the prior declaration specifies internal orexternal link...原创 2018-05-08 00:34:54 · 255 阅读 · 0 评论 -
记录一个c语言的古老语法,在阅读源码的时候,遇到strgetmsg(fd, ctlp, datap, flagsp, caller) int fd; struct strbuf *ctlp, *dat
strgetmsg(fd, ctlp, datap, flagsp, caller)int fd;struct strbuf *ctlp, *datap;int *flagsp;char *caller;在阅读iftop源码的时候,遇到这种写法,查阅文档得知,这是一种古老的写法,K&R风格,写法太过古老,可能是由于iftop是一款古老的软件,所以不建议再使用,但是记录在这里,防止以后再次遇...原创 2018-05-07 10:37:34 · 307 阅读 · 0 评论 -
CPU之分支跳转优化
CPU从某个版本开始加入了分支跳转预测,所以,在书写分支跳转代码时,应该尽可能的使跳转在同一方向连续发生,以提高代码的执行效率。原创 2017-11-22 12:41:59 · 783 阅读 · 0 评论 -
在项目中,多次声明函数的好处
有些时候,一些函数已经包含在头文件中,但是我曾经看到一份源代码,依然在开头采用extern的方式,再次声明了一些实际使用到的函数,这种方式的好处是什么?仔细想了想,第一、可以防止某些头文件中漏掉包含一些函数的声明第二、这种方式使源代码更加清晰,特别是在庞大的工程中,更加有利于源代码的阅读。第三、有利于组内不同人之间,实时的调整接口,等待模块写好之后,再将需要开放的接口一并写原创 2017-07-04 08:49:00 · 1557 阅读 · 0 评论