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语言中运用数字有哪些小知识呢,不妨花点时间看一下这篇博文,牢记这些小知识. 整数类型中四种进 ...
随机推荐
- [Android]优化相关
尽量减少布局的层次,最多10层,可以通过LinearLayout向RelativeLayout的转变来减少层的数量 使用ListView的时候,getView方法中的对象尽量重用
- TTTAttributedLabel 富文本小记
- (void)setupTipsLabel:(TTTAttributedLabel *)label { UIColor *red = [UIColor mainColor]; UIColor *gr ...
- webapi集成owin使用Oauth认证时能获取accee_token仍无法登录的解决办法
HttpConfiguration webapiConfig = new HttpConfiguration(); IIocBuilder iocBuilder = new OwinAutofacIo ...
- dynamic 用法
private static string GetNameValue(object value) { dynamic obj = value; try { return obj.Name; } cat ...
- Java多线程 2 线程的生命周期和状态控制
一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...
- MATLAB读取一张RGB图片转成YUV格式
1.读入照片 控制输出的标志定义 clc;close all;clear YES = 1; NO = 0; %YES表示输出该文件,请用户配置 yuv444_out_txt = 1; yuv444_o ...
- eafier 簡單易用 HTML、CSS 網頁編輯器(可自動插入 Tag 標籤)
很久很久以前,一般人要做網頁的話大概都會用 FrontPage 之類的工具,更進階一點的會用 Dreamweaver 等軟體.雖然上述軟體提供很方便的「所見即所得」的編輯預覽模式,但寫出來的網頁程式碼 ...
- 纯CSS 图片演示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- applicationContext.xml的基本配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- JS打开新页面跳转
有时候使用js进行页面跳转,想使用 a 标签中 target="_blank" 形式,跳转打开一个新的页面. 可以使用以下脚本,创建一个 a标签,然后模拟点击操作. 代码如下: ...