预定义宏是C语言中标准编译器预先定义的宏,在ANSI标准中C程序有5个预定义宏可以直接使用
ANSI标准中说明了以下5个宏替换名,可以直接使用
LINE:当前编译的代码的行号
FILE:当前编译文件的源文件名
DATE:当前源程序创建的日期
TIME:当前源程序创建的时间
STDC:判断当前的编译器是否为标准C编译器,若是则返回值1
使用#undef 宏名的方式取消宏定义
取肖宏定义后,可以重新定义这个宏
#
可作为单目操作符,用于字符串化,后面面是宏形参名称。
宏展开后,#形参
被包含在双引号内的实参替换。
#include
#define GETSTR(strTxt) "str:" #strTxt "\n"
int main(int argc, char **argv)
{
printf(GETSTR("hello"));
return 0;
}
str:"hello"
Hit any key to continue...
比如 x##5
结果是x5
#include
#define GETVARNAME(n) x##n
int main(int argc, char **argv)
{
for (int i=1;i<=5;i++){
int GETVARNAME(i)=i;
printf("%d\n",GETVARNAME(i));
}
return 0;
}
结果如下:
1
2
3
4
5
Hit any key to continue...
任意多个表达式,从第一个表达式计算到最后一个表达式,最后一个表达式为最终值
#include
#define GETVARNAME(n) x##n
int main(int argc, char **argv)
{
int j=11;
int i=22;
int z=(j+=i,i+=j);
printf("%d\n",z);
return 0;
}
z的结果就是i最终的值。
55
Hit any key to continue...
#include
#define GETVARNAME(n) x##n
int main(int argc, char **argv)
{
int j;
int i;
for (j=0,i=(j+8) % 6; i<=5;i++){
printf("%d\n",i);
}
return 0;
}
上面例子中参与循环条件的核心变量i的初始值,通过j计算得到。
2
3
4
5
Hit any key to continue...
short int
unsigned short int
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
十进制不能以0开头,包含0-9的数字
八进制以0开头,包含0-7的数字
十六进制以0x开头,包含0-9以及a-f
float :单精度
double:多精度
long double:扩展精度浮点
ch=getchar()将字符读入到ch变量中,返回为int类型。
putchar(ch)将ch写入
#include
int main(int argc, char **argv)
{
int x1[]={1,2,3,4,5};
int x2[5]={1,2,3,4,5};
int x3[5]={1};
printf("%d %d %d\n",x1[1],x2[1],x3[1]);
return 0;
}
运行结果如下:
2 2 0
Hit any key to continue...
注意,x3只初始化了第1个元素的值1,其它元素都初始化默认值0。
100 0 99
Hit any key to continue...
源代码如下:
#include
int main(int argc, char **argv)
{
int x4[5]={[1]=100,[3]=99};
printf("%d %d %d\n",x4[1],x4[2],x4[3]);
return 0;
}
指定索引的方式来指定值,其它索引的位置默认为0。
使用下面格式
类型 变量名[第1维长度][第2维长度]....[第n维长度]
#include
int main(int argc, char **argv)
{
int x[2][3][2]={[1][2][1]=111};
printf("%d %d\n",x[0][1][1],x[1][2][1]);
return 0;
}
0 111
Hit any key to continue...
可以按索引位置指定值。
#include
int main(int argc, char **argv)
{
int x1[2][2]={1,2,3,4};
int x2[2][2]={{1,2},{3,4}};
int x3[3][2]={[2][1]=100,[2][0]=99};
for (int i=0;i<3;i++){
for (int j=0;j<2;j++){
printf("%d ",x3[i][j]);
}
printf("\n ");
}
for (int i=0;i<2;i++){
for (int j=0;j<2;j++){
printf("%d ",x1[i][j]);
}
printf("\n ");
}
for (int i=0;i<2;i++){
for (int j=0;j<2;j++){
printf("%d ",x2[i][j]);
}
printf("\n ");
}
return 0;
}
结果如下
0 0
0 0
99 100
1 2
3 4
1 2
3 4
Hit any key to continue...
数组长度在执行时计算,在编译时无法确定。
#include
int main(int argc, char **argv)
{
int n;
printf("请输入长度:");
scanf("%d",&n);
int x[n];
for (int i=0;i<n;i++){
printf("\n请输入值:");
scanf("%d",&x[n]);
}
return 0;
}
结果如下:
请输入长度:5
请输入值:1
请输入值:2
请输入值:3
请输入值:4
请输入值:5
Hit any key to continue...