标准c语言笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在以下情况下:
if(NULL == pPointer) foo();
就会出现action1和action2不会同时被执行的情况,而这显然不是程序设计的目的。
4,以上的第3种情况用单独的{}也可以实现,但是为什么一定要一个do{}while(0)呢,看以下代码:
#define switch(x,y) {int tmp; tmp="x";x=y;y=tmp;}
绝大多数的编译器都能够识别do{…}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性
addr *ad = (addr*)&local; printf("%d %s",ad‐>ip,ad‐>host_name); return 0; }
2.结构体变量的大小动态变化
#include <stdio.h> #include <stdlib.h>
typedef struct addr {
int size; int in_addr[0]; } ADDR;
struct addr {
int ip; char host_name[100]; };
struct addr_in {
addr in_addr; int size; };
int main() {
addr_in local; local.in_addr.ip=123; strcpy(local.in_addr.host_name,"www");
不同的 struct 之间可以根据其内存的存放规则进行强制类型转换
实例 1:
#include <stdio.h> #include <string.h>
struct addr {
int ip; char host_name[100]; };
struct addr_in {
int ip; char host_name[100]; int other; };
if(x>y)
switch(x,y);
else
//error, parse error before else
otheraction();
在把宏引入代码中,会多出一个分号,从而会报错。
//-----------------------------------------------使用do{….}while(0) 把它包裹起来,成为一个独立的语法单元,从而不会与上下文发生混淆。同时因为
x &= (x‐1); count++; } return count; }
int main() {
srand( (unsigned)time( NULL ) ); int a = rand(); printf("%d has %d bits",a,bitcount(a)); return 0; }
do{… }while(0)的妙用
1,空的宏定义避免warning: #define foo() do{}while(0)
2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。
3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:
#define foo(x) \ action1()addr_in local; local.ip=123; strcpy(local.host_name,"www");
addr* ad = (addr*)&local; printf("%s\n",ad‐>host_name); return 0; }
实例 2
#include <stdio.h> #include <string.h>
int main(void) {
ADDR *adr; int i; adr = (ADDR *)malloc(sizeof(int)*100);
for(i=0;i<99;i++) { adr‐>in_addr[i] = i; printf("%d ", adr‐>in_addr[i]);
} return 0; }
3.快速计算一个数字包含几位
原理:x &=(x‐1) deletes the rightmost 1‐bit in x.
#include <stdio.h> #include <stdlib.h> #include <time.h>
int bitcount(int x) {
int count = 0; while(x) {
THE C PROGRAMMING LANGUAGE 学习笔记(欢迎交流 wegatron@)
不同的 struct 之间可以根据其内存的存放规则进行强制类型转换 ............................................................... 1 do{… }while(0)的妙用........................................................................................................................................... 3 一些常用标准宏 .................................................................................................................................................. 6 一个 c 语言的错误 .............................................................................................................................................. 7 C 语言连等号基础 ............................................................................................................................................... 7 c 语言常量和常量表达式的特性........................................................................................................................ 7 c 语言包含 ........................................................................................................................................................... 7 字符串转换为数值函数 ...................................................................................................................................... 8 有符号字符和无符号字符 ..................................................................................................................................8 符号前后的计算优先级不定 .............................................................................................................................. 8 c 语言操作符优先级 .......................................................................................................................................... 8 宏#define 等的用法............................................................................................................................................. 9 命令行参数 .......................................................................................................................................................... 9 返回整数的 getchar............................................................................................................................................. 9 c 语言的函数声明的两个缺陷 ......................................................................................................................... 10 sizeof 操作符...................................................................................................................................................... 10 标准输入输出 .................................................................................................................................................... 11 文件的输入输出 ................................................................................................................................................ 13 C 语言的可变参数函数 ....................................................................................................................................14 #pragma 预处理指令........................................................................................................................................15 #error.................................................................................................................................................................. 16
相关文档
最新文档