C语言杂记

本文介绍了C语言中的宏定义,包括__LINE__, __FILE__, __DATE__, __TIME__, 和__STDC__等预处理器宏,以及typedef的使用方法。接着详细阐述了不同类型的变量声明格式,并探讨了continue和break在循环中的作用。最后,解析了一个涉及函数指针的复杂表达式,深入理解C语言的底层机制。" 114831105,10551813,快速入门基因集富集分析GSEA with Java,"['生物信息学', '基因分析', 'Java应用', '数据科学']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、C语言自带的宏定义

1.__LINE__:表示正在编译文件的行号
2.__FILE__:表示正在编译文件的名字
3.__DATE__:表示编译时刻的日期字符串
4.__TIME__:表示编译时刻的时间字符串
5.__STDC__:判断该文件是不是定义成标准C程序
6.sizeof在编译是生效

二、typedef定义

1.typedef int sss[10]//定义一个新的关键字,sss,它定义的一个变量为int[10]类型的。
2.typedef int (*FUN)(int ,int );//第一个FUN类型,FUN,它定义的一个变量为一个函数指针,这个函数返回的是int类型,参数为两个int类型。

三、定义变量的格式

a) 一个整型数
b) 一个指向整型数的指针
c) 一个指向指针的的指针,它指向的指针是指向一个整型数
d) 一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
答案是:
a) int a;  
b) int *a;
c) int **a;
d) int a[10];
e) int *a[10];
f) int (*a)[10];
g) int (*a)(int);
h) int (*a[10])(int);

四、语句杂记

1.continue和break如果工作在嵌套循环中,永远只对内层循环起作用。在for语句中,continue的作用是跳过其他语句,直接执行(for(;;i++))i++ 操作。
如果continue在switch中,没有作用;如果在循环内的switch中,作用于循环。

2.常量表达式:编译时求值的表达式,它不能是任何变量。

3,switch中的case标签,并不是把代码划分为几个部分,只是确定语句列表的进入点。

5.(*(void(*u) ())0)();这是《C Traps and Pitfalls》这本经典的书中的一个例子。

下面我们就来分析分析:
第一步:void(*) (),可以明白这是一个函数指针类型。这个函数没有参数,没有返回值。
第二步:(void(*) ())0,这是将0 强制转换为函数指针类型,0 是一个地址,也就是说一
个函数存在首地址为0 的一段区域内。
第三步:(*(void(*) ())0),这是取0 地址开始的一段内存里面的内容,其内容就是保存
在首地址为0 的一段区域内的函数。
第四步:(*(void(*) ())0)(),这是函数调用。
好像还是很简单是吧,上面的例子再改写改写:
(*(char**(*) (char **,char **))0) ( char **,char **);

                                                                                                                                                                                                                                                               待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值