C语言的一些小知识
注:本文讨论的“C语言”为GNU C,而非ANSI C
标准库
语法
switch语句中的case关键词可以放在任何地方
switch (a) {
case 1:;
if (b==2) {
case 2:;
}
else case 3: {
for (b=0;b<10;b++) {
case 5:;
}
}
break;
case 4:
}
声明紧随用途之后
理解声明有一条很简单的法则:一个声明是要告诉你,你所声明的对象要如何使用。例如:
int *p;
/* *p是int类型的, 因此p是指向int类型的指针 */
int a[5];
/* a[0], ..., a[4] 是int类型的, 因此a是int类型的数组 */
int *ap[5];
/* *ap[0], .., *ap[4] 是int类型的, 因此ap是包含指向int类型指针的指针数组 */
int (*pa)[5];
/* (*pa)[0], ..., (*pa)[4] 是int类型的, 因此pa是指向一个int类型数组的指针 */
void (*signal(int signum, void(*handler)(int)))(int);
/* (*signal(int signum, void(*handler)(int)))(int)是void类型的,因此
* signal是一个接收两个参数,返回一个接收一个参数且返回空类型的函数指针 */
这非常有用。
指定初始化
在c99之前,你只能按顺序初始化一个结构体。在c99中可以这样做:
struct Foo {
int x;
int y;
int z;
};
Foo foo = {.z = 3, .x = 5};
这段代码首先初始化了foo.z,然后初始化了foo.x. foo.y 没有被初始化,所以被置为0。
这一语法同样可以被用在数组中。以下三行代码是等价的:
int a[5] = {[1] = 2, [4] = 5};
int a[] = {[1] = 2, [4] = 5};
int a[5] = {0, 2, 0, 0, 5};
条件运算符的用法
通常我们都这样使用它:
x = (y < 0) ? 10 : 20;
但是同样也可以这样用:
(y < 0 ? x : y) = 20;
这是因为,GNU C扩展了条件运算符,使之可以返回左值。
将结构体初始化为0
struct mystruct a = {0};
这将把结构体中全部元素初始化为0。
预处理器与编译器是分开的
你可以在奇怪的地方使用#include:
printf
#include "fragment.c"
且fragment.c 包含:
("dayum!\n");
这完全没有问题。只要#include 包含完整可解析的C表达式,预处理器并不在意它放在什么位置。
这也是为什么宏错误较难调试。
在switch 中使用范围(gcc扩展语法)
switch(c) {
case 'A' ... 'Z':
//do something
break;
case 1 ... 5 :
//do something
}
使用前缀ob 来限定常数,使其被当做二进制数(gcc扩展语法)
printf("%d", 0b1101);
// prints 13
C语言的一些小知识的更多相关文章
- c语言结构体小知识
引自:http://c.biancheng.net/cpp/html/88.html 结构体在内存中是连续存储的 struct stu{ char *name; //姓名 int num; //学号 ...
- 02-C与OC语言的一些小知识
1. #import 跟#include.@class有什么区别?#import<> 跟 #import”"又什么区别? 1> #import和#inclu ...
- 在VC6.0下运行C语言程序,以及编程入门必备的常识类小知识!
今天给大家分享在VC6.0环境下编写C语言程序的基本步骤,为初学者打开学习C语言的第一道门.具体步骤如下(如果需要软件资源,可以留言): 1)新建工作区 依次点击 文件--新建--工作区 或是Ctrl ...
- C语言中重要的小知识汇总
用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...
- HTML+CSS中的一些小知识
今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- JS框架设计读书笔记之-小知识
这一篇写一点小知识 JS中0.1+0.2为什么不等于0.3? 关于这个问题之前也很疑虑,老师也只是笼统的讲这是JS的语言问题,但是内部具体的情况却没有讲,看了书才发现原理如此简单. 简单来讲,计算机识 ...
- 简述Python入门小知识
如今的Python开发工程师很受企业和朋友们的青睐,现在学习Python开发的小伙伴也很多,本篇文章就和大家探讨一下Python入门小知识都有哪些. 扣丁学堂简述Python入门小知识Python培训 ...
- python之数字类型小知识
数字是表示计数的抽象事物,也是数学运算和推理的基础,所以,生活中数字是生活中无处不在的,那么,在python语言中运用数字有哪些小知识呢,不妨花点时间看一下这篇博文,牢记这些小知识. 整数类型中四种进 ...
随机推荐
- MTK MT33xx型GPS的NMEA协议解析实例
1)解析实现 gps_main.c #include <nmea/nmea.h> #include <string.h> #include <stdio.h> #i ...
- [c#基础]关于try...catch最常见的笔试题
引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...
- Git Stash紧急处理问题,需要切分支
在开发过程中,大家都遇到过bug,并且有些bug是需要紧急修复的. 当开发人员遇到这样的问题时,首先想到的是我新切一个分支,把它修复了,再合并到master上. 当时问题来了,你当前正在开发的分支上面 ...
- 2.0、Hibernate框架的简单搭建
一.Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句 ...
- PopupWindow 使用
昨天马失前蹄,为了做一个小键盘,耽误了两个小时,记录一下心路历程 1.关于需求与选择 需求: 点击一个按钮,弹出一个小键盘(类似于输入法键盘) 选择: (1)方案一:KeyboardView 这是百度 ...
- html div 添加链接
<html> <body> <a href="http://www.w3school.com.cn/" target="_blank&quo ...
- Django Restful Framework (二): ModelSerializer
时常,你需要对django model 的实例进行序列化.ModelSerializer 类提供了一个捷径让你可以根据 Model 来创建 Serializer. ModelSerializer 类和 ...
- PHP中被定义为false的
if($res == false){ echo "未定义通过<br>"; } $res = 0; if($res == false){ echo "0数字通过 ...
- Oracle的动态性能视图[持续更新]
前言 .... v$version:查看数据库版本 其中 Oracle Database:指代数据库版本 PL/SQL:ORACLE对于标准SQL的超集,全称Procedural Language/S ...
- 001_SPL工作中总结
一.SPL字段搜索中value带双引号和不带双引号的区别 如:iis.cs_uri_stem:\/api\/Purchase\/Common\/* AND logtype:iis 和iis.cs_ur ...