Linuxl下C编程系列--C语言(容易疏忽的问题)l
2007-08-09 14:38
435 查看
编译预处理
三种预处理命令
1.宏定义
2.包含文件 #include
3.条件编译
定义 #define S(a,b) a*b
引用 S(a+c,b+c)
展开 a+c*b+c
条件编译
#define DEBUG //调试版本,在发布版本中把这句删除,那么程序中调试部分不会起作用
情况一:
#if常量表达式
程序段1
#else
程序段2
#endif
情况二:
#ifef 标识符 //是否已经定义
程序段1
#else
程序段2
#endif
常见:
#ifdef DUBUG
或者:
#ifndef
#endif
指针
指针函数:返回值为指针类型的函数
函数指针 int (*p)(); p是函数名,代表函数入口地址
例:
#include<stdio.h>
main()
{
int max();
int (*p)();
int a,b,c;
p=max;
scanf("%d,%d",&a,&b); //输入a.b。以逗号隔开
c=(*p)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
int max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
*p++ :*p,然后p+1;
*++p :p+1,然后取*p;
例:
#include<stdio.h>
main()
{
int a[]={1,2,3,4,5};
int* p=a+3;
printf("%d,%d,%d/n",*p,*(p+1),*p+3);
}
输出结果是:4,5,7
结构体、共同体、位段
结构体
共同体:不能对共同体变量进行初始化,也不能将共同体变量作为函数参数,以及使用函数返回一个共同体数据,但是可以使用指向共同体变量的指针
typedef 定义已有类型的别名,记住:只是别名,不能创建新类型
typedef与#define有相似之处,但二者是不同的:前者是编译器在编译时处理的;后者是由编译预处理时处理,而且只能作简单的字符串替换。
位段结构:
有时,存储1个信息不必占用1个字节,只需要二进制的1个位就够用了。
注意:在windows下:
BOOL其实是整型,而bool类型是字节型。经测试:BOOL占4个字节,而bool只占1个字节
还有一点:为了和另外一些语言谦容,bool是C++的关键字,BOOL是API用的,MFC派生于API。所以在用MFC时,尽量不要动那些BOOL类型,至于bool型,一般修改后没什么特别的问题。
三种预处理命令
1.宏定义
2.包含文件 #include
3.条件编译
定义 #define S(a,b) a*b
引用 S(a+c,b+c)
展开 a+c*b+c
条件编译
#define DEBUG //调试版本,在发布版本中把这句删除,那么程序中调试部分不会起作用
情况一:
#if常量表达式
程序段1
#else
程序段2
#endif
情况二:
#ifef 标识符 //是否已经定义
程序段1
#else
程序段2
#endif
常见:
#ifdef DUBUG
或者:
#ifndef
#endif
指针
指针函数:返回值为指针类型的函数
函数指针 int (*p)(); p是函数名,代表函数入口地址
例:
#include<stdio.h>
main()
{
int max();
int (*p)();
int a,b,c;
p=max;
scanf("%d,%d",&a,&b); //输入a.b。以逗号隔开
c=(*p)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
int max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
*p++ :*p,然后p+1;
*++p :p+1,然后取*p;
例:
#include<stdio.h>
main()
{
int a[]={1,2,3,4,5};
int* p=a+3;
printf("%d,%d,%d/n",*p,*(p+1),*p+3);
}
输出结果是:4,5,7
结构体、共同体、位段
结构体
共同体:不能对共同体变量进行初始化,也不能将共同体变量作为函数参数,以及使用函数返回一个共同体数据,但是可以使用指向共同体变量的指针
typedef 定义已有类型的别名,记住:只是别名,不能创建新类型
typedef与#define有相似之处,但二者是不同的:前者是编译器在编译时处理的;后者是由编译预处理时处理,而且只能作简单的字符串替换。
位段结构:
有时,存储1个信息不必占用1个字节,只需要二进制的1个位就够用了。
注意:在windows下:
BOOL其实是整型,而bool类型是字节型。经测试:BOOL占4个字节,而bool只占1个字节
还有一点:为了和另外一些语言谦容,bool是C++的关键字,BOOL是API用的,MFC派生于API。所以在用MFC时,尽量不要动那些BOOL类型,至于bool型,一般修改后没什么特别的问题。
相关文章推荐
- 重温C语言系列之一(开始Linux下的编程)
- 重温C语言系列之一(开始Linux下的编程)
- Linux下的C语言编程——买鸡问题
- C语言编程容易混淆的几个问题总结
- linux多线程编程——读者优先、写者优先问题
- Linux 下C语言编程
- William Stallings 《操作系统内核和设计原理》书中Linux下C语言实现读者写者问题(写者优先)代码
- 基于51系列单片机的简单c语言编程
- 解决Linux下Python3交互式编程时方向键乱码问题
- Linux 串口编程中遇到的问题
- 学习c语言遇到的一些问题(4)(Linux)(不确定大小的数组)
- Linux网络编程中的地址问题
- Linux下C语言TCP编程01
- "手把手教你学linux驱动开发”OK6410系列之01---模块编程
- “C语言” 读书札记(六)之[Linux下C语言编程环境Make命令和Makefile]
- x4412开发板&ibox卡片电脑项目实战8-Linux下的C语言编程风格
- 安装Linux和搭建C语言编程环境
- C语言编程问题
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux平台编程新手入门 C语言中的移位操作