自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (5)
  • 收藏
  • 关注

原创 你必须知道的C语言问题(12)

问:如下,我想指定数组中的某个(些)元素初始化为指定值,一般都是写出全部元素的初始值,有没有简单的方式?答:可以按如下方式指定数组中的某个(些)元素初始化为指定值(编译器需支持C99标准)。

2024-09-21 22:39:28 141

原创 你必须知道的C语言问题(11)

答:计算过程中数据发生了溢出,14行,a和b都是uint32_t类型,a*b计算的结果也按uint32_t类型存储,这里计算结果超出了4字节,会先截短为4字节然后再赋值给d。15行类似,a*b得到的结果截短后再除c。答:稳妥的方式是将参与计算的变量(位宽)定义的足够大,当然本例中只需将a或b定义为uint64_t即可。问:如下代码,计算结果为什么不符合预期?问:如何处理这种情况?

2024-09-16 21:59:26 238

原创 你必须知道的C语言问题(10)

答:代码有内存溢出(俗称踩内存)。第13行len定义的是一个uint8_t的变量,但是通过get_str_len赋值时,是按uint32_t类型赋值的,会将后面3字节的内存覆盖掉(小端,3字节为全0)。由于14和18行的存在,被覆盖的内存没有用,所以不会有异常表现,注释掉14和18行后,str的前3字节就被改写为0了,0是字符串结束符,所以str打印不出来。问:如下代码,我注释掉没用的14行和18行后,为什么str就打印不出来了?

2024-09-16 09:27:38 126

原创 你必须知道的C语言问题(9)

test1_t类型的结构体它的最大成员变量b是4字节,该结构体一定是4字节对齐的,也就是第一个成员变量a是4字节对齐,第二个变量b也必须是4字节对齐,a和b之间会有3个字节的空隙,c大小是1字节,紧跟在b之后即可,但是test1_t的大小一定是4的倍数,所以c的后面也会有3字节的空隙。总的大小时12字节。同样的方法分析test2_t类型的结构体,a占1字节,b占1字节,b和c之间有2字节的空隙,c占4字节,总大小8字节。问:如下代码,两个结构体类型成员变量相同,只是成员顺序不同,为什么大小不同?

2024-09-15 22:42:05 215

原创 你必须知道的C语言问题(8)

答:由于人名长度不定,person_t结构体不好分配固定大小的内存,结构体中零长度的数组本身不占大小,仅仅是一个符号,表示前一个成员之后的地址,实例化时可以根据name的长度分配合适的内存,分配内存后零长度数组name就成为了一个真正的数组,数组大小就是多分配出来的内存,实现了一个可变长度的结构体。问:如下结构体中为什么会出现零长度的数组,作用是什么?

2024-09-04 23:03:22 183

原创 你必须知道的C语言问题(7)

答:typedef定义了一个新的类型名,但是不能在定义类型名之前使用它。问:如下,我定义了一个链表头,为什么编译报错?

2024-09-01 10:30:48 141

原创 你必须知道的C语言问题(6)

int snprintf(char* dest, size_t size, const char* format, ...),当格式化字符串的长度大于或等于n时,只会复制n-1个字符到dest,结尾自动添加空字符。总结:字符串处理函数一般都会在结尾自动添加空字符,只有strncpy是个特例,当src的长度大于或等于n时,dest的尾部不会自动添加空字符,当src的长度小于n时才会自动添加空字符。问:如下代码分别用strncpy和snprintf拷贝字符串,都能符合预期吗?

2024-08-22 22:14:05 196

原创 你必须知道的C语言问题(5)

答:第4行定义了一个指针变量,指向一个字符串,这个字符串是放在rodata段,不可写。第5行是定义了一个数组,数组用字符串初始化,和char a[] = {‘h’, 'e', 'l', 'l', 'o', '\0'};答:编译没有任何报错,但是运行会异常退出。问:编译并运行如下代码,会有问题吗?

2024-08-20 22:06:49 193

原创 你必须知道的C语言问题(4)

答:宏定义编译时展开,TIMES(1 + 1, 2 + 2)展开后是1 + 1 * 2 + 2。问:编译并运行如下代码,符合预期吗?答:不符合预期,执行命令输出:5。问:不符合预期的原因是什么?问:如何解决这种问题?

2024-08-19 22:42:12 146

原创 你必须知道的C语言问题(3)

答:编译时会报警告:warning: implicit declaration of function ‘func1’。执行时输出:0x55667788。问:函数func1明明返回的是0x1122334455667788,为什么输出少了4个字节?答:file2.c里没有func1的声明,编译器默认func1的返回值是int类型。答:在调用func1的文件里完整的声明func1。问:编译并运行如下代码,符合预期吗?

2024-08-18 10:16:41 161

原创 你必须知道的C语言问题(2)

答:编译时将报错:error: invalid application of ‘sizeof’ to incomplete type ‘uint32_t[]’。结论:用sizeof获取数组的大小时,sizeof要能在当前文件中“看到”数组的大小(定义或者声明)。答:sizeof在编译时确定对象的大小,但它在当前文件中不能看到数组a的大小。问:我在file1.c里完整定义了数组a,为什么还会报错?问:编译并运行如下代码,会有什么问题?

2024-08-17 23:04:58 124

原创 你必须知道的C语言问题(1)

答:编译时将报错“ error: ‘b’ undeclared (first use in this function)”。结论:变量定义的位置决定它的作用域,{}内定义的变量作用域限定在离该变量最近的{}中。答:变量b的作用域仅限于离它最近的大括号内。问:第5行我明明定义(并声明)了,为什么还报错?问:编译并运行如下代码,会有问题吗?

2024-08-17 11:41:29 158

原创 第一个GTK程序

source code#include <gtk/gtk.h>int main(int argc, char* argv[]){ GtkWidget * window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk...

2019-05-26 18:29:09 189

原创 winodws下gtk开发环境的安装(msys2)

下载地址:官网:http://www.msys2.org/清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/中国科学技术大学镜像:http://mirrors.ustc.edu.cn/msys2/distrib/国内用清华和科大的镜像下载速度很快,官网的下载速度很慢。按照官方指导安装msys2后按如下方法修改镜像...

2019-05-26 15:19:07 2856

原创 统计汉字使用频率

一、主要内容1、学习什么是hash表,运用hash表解决问题。2、了解自动数组(根据存储内容自动调整大小),数组的排序。3、利用hash表统计经典巨著《红楼梦》中所有汉字的使用次数。4、利用数组,对所有汉字按使用次数进行排序。二、要到的基础库本练习要到Glib库,Glib是在C语言标准库的基础上实现的一套跨平台的功能强大的通用函数库。三、编程环境编程环境为Cygwi...

2019-05-01 18:05:08 4192

原创 C语言运算符

目录算术运算符关系运算符逻辑运算符位运算符赋值运算符特殊运算符运算符的优先级算术运算符 运算符 描述 实例 + 加法运算符 int a = 5 + 5; int b = a + 5; - 减法运...

2019-04-14 16:46:05 756

原创 格式化输入

控制符 含义 %c 把输入解释成字符 %d 把输入解释成有符号十进制整数 %e、%f、%g、%a(C99) 把输入解释成浮点数 %E、%F、%G、%A(C99) 把输入解释成浮点数 ...

2019-04-14 16:36:14 165

原创 格式化输出

目录控制符和输出说明格式化输出的修饰符转义字符控制符和输出说明 控制符 输出 %a 浮点数、十六进制数和p计数法(C99/C11) %A 浮点数、十六进制数和p计数法(C99/C11) %c 单个字符 %d...

2019-04-14 16:34:23 2272 1

原创 C语言基本数据类型

C语言基本数据类型 类型 C语言规范 gcc-7.4.0 x86_64 (Bytes) char 一个字节 1 short 字节数小于或等于int 2 int ...

2019-04-14 16:18:48 243

原创 通用Makefile

EXE = testCC = gccSRC = $(wildcard *.c)OBJ = $(SRC:.c=.o)INCLUDES = -I/usr/include/glib-2.0/ -I/lib/glib-2.0/include/ LIBS = -L/lib/ -lglib-2.0CFLAGS = -g -O2 -Wall $(INCLUD...

2019-03-30 18:12:38 156

原创 Cygwin编程环境

目录为什么用CygwinCygwin的安装为什么用Cygwin1、兼容大部分windows和linux代码 使用windows API和linux API的绝大多数代码都能用cygwin编译,甚至可以windows和linux混合编程。2、命令行编译简洁高效 不用IDE,摆脱IDE繁琐的设置和操作,专心代码编写3、可以使用大部分的linux命令...

2019-03-30 12:12:53 2023

转载 作为一个新人,怎样学习嵌入式Linux?(转自韦东山老师)

12-04-18 23:33:07)转载▼标签: it在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用VC

2014-08-18 23:35:22 441

原创 操作系统栈空间字节对齐

LPC1768(cortex-m3核)MCU,要求栈8字节对齐,所以在用操作系统时,

2014-07-13 00:29:33 1025

原创 keil(mdk)中宏定义

一般宏定义只有在包含其定义文件的文件中

2014-07-12 23:47:02 14587

原创 BootLoader时钟

bootLoader用内部时钟时可正常跳转运行应用程序,用外部晶振则不能正常跳转

2014-07-12 23:11:03 377

原创 Keil (MDK)中变量定义位置

mdk开发环境,变量不能在语句后面定义,但是在Misc Controls中加入--gnu -Dlittle_endian后,可以。

2014-07-12 22:58:17 7424 1

cygwin下的arm交叉编译工具链用到的dll

cygwin下的arm交叉编译工具链用到的dll,cygattr-1.dll,cygcloog-0.dll,cyggmpxx-4.dll,cygmpfr-1.dll,cygppl_c-2.dll,cygppl-7.dll,cygsigsegv-2.dll

2018-07-01

cygwin下的arm交叉编译工具链

cygwin下的arm交叉编译工具链,cygwin下的arm交叉编译工具链

2018-07-01

空空如也

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

TA关注的人

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