串口调试printf()函数

#include<stdio.h>

//int printf(const char *format,...)
//format:固定参数
//...:可变参数


//可以使用gcc中的__attribute__选项来设置指定的对齐大小。
//1.__attribute__((packed))取消编译器在编译过程中字节对齐的优化,以实际占用字节对齐。
//2.__attribute__((aligned(n))),所有结构体成员按照n对齐,如果成员变量大与n,则按照最大的成员变量的字节数对齐
struct person
{
	char *name;
	int   age;
	char score;
	int   id;
}
struct person1
{
	char *name;
	int   age;
	char score;
	int   id;
}__attribute__((packed));
struct person2
{
	char *name;
	int   age;
	char score;
	int   id;
}__attribute__((aligned(n)));


//int printf(const char *format,...)
//原理   X86平台,GCC默认4字节对齐,函数调用时参数传递是使用堆栈来实现的
//目的  将所有传入的参数全部打印出来
//堆栈也是连续空间
//指针对连续空间操作时,1,取值。2,移动指针。
int push_test(const char * format,...)
{
	char *p = (char *)&format;
	int i ;
	struct person per1;
	printf("arg1 : %s\n",format);

	p += sizeof(char *);//因为之前的format是char *类型
	i = *((int *)p);
	printf("arg2 : %d\n",i);
	per1 = *((struct person *)p);
	printf("arg3: .name = %s, .age = %d, .socre = %c, .id = %d\n",\
			   per1.name,per1.age,per1.score,per1.id);

	p += sizeof(int);//因为之前的12356是int类型?
	
	
	return 0;
}


int main(int argc,char **argv)
{
	struct person per = {"Posiden",7,'C',777};
	
	char *p = (char *)&format;
	int i;
	
	printf("sizeof(char   ) = %d\n", sizeof(char   ));
	printf("sizeof(int    ) = %d\n", sizeof(int    ));
	printf("sizeof(char  *) = %d\n", sizeof(char  *));
	printf("sizeof(char **) = %d\n", sizeof(char **));

	push_test("ccccc");
	push_test("ccccc",123456);
	push_test("ccccc",123456,per);
	return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值