c语言中函数与符号的区别 c语言指针与函数的关系( 二 )


C语言合法标识符有哪些
我们首先要知道标识符由字母、下划线、数字这三个方面组成 。
同时标识符标示符分为预定义标示符和用户标示符
预定义标示符是系统定的 , 如printf,scanf 。
用户标示符是用户自己定的 , 以下划线或字母开头 , 由下划线,字母,数字组成 。
只要没有错误都可视为合法标识符 , 由于用户标识符可以自己设定并且自由变换会有很多种,所以就在这列举一些合法的预定义的标识符 。
auto break case char const continue
default do double else enum extern
float for goto if inline int long register restrict return short signed
sizeof static struct switch typedef union
unsigned void volatile while
_Imaginary_Generic
特别注意的是,关键字不能是标识符,如main等
标识符由字母、下划线、数字这三个方面组成,但开头必须是字母或下划线 。
另外 , 关键字不能是标识符,如main等 。
C语言中的用户标识符都有哪些c语言中函数与符号的区别?
自定义的,随便定义了
C语言中需要前面加#号的标识符有哪些
条件编译
预处理程序提供了条件编译的功能 。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件 。这对于程序的移植和调试是很有用的 。
条件编译有三种形式,下面分别介绍:
1. 第一种形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是 , 如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译 。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:
#ifdef 标识符
程序段
#endif
【例】
#define NUM ok
main(){
struct stu
{
int num;
char *name;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps-num=102;
ps-name="Zhang ping";
ps-sex='M';
ps-score=62.5;
#ifdef NUM
printf("Number=%d\nScore=%f\n",ps-num,ps-score);
#else
printf("Name=%s\nSex=%c\n",ps-name,ps-sex);
#endif
free(ps);
}
由于在程序的第16行插入了条件编译预处理命令,因此要根据NUM是否被定义过来决定编译那一个printf语句 。而在程序的第一行已对NUM作过宏定义,因此应对第一个printf语句作编译故运行结果是输出了学号和成绩 。
在程序的第一行宏定义中,定义NUM表示字符串OK,其实也可以为任何字符串 , 甚至不给出任何字符串,写为:
#define NUM
也具有同样的意义 。只有取消程序的第一行才会去编译第二个printf语句 。读者可上机试作 。
2. 第二种形式:
#ifndef 标识符
程序段1
#else
程序段2
#endif
与第一种形式的区别是将“ifdef”改为“ifndef” 。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译 。这与第一种形式的功能正相反 。
3. 第三种形式:
#if 常量表达式
程序段1
#else
程序段2
#endif
它的功能是 , 如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译 。因此可以使程序在不同条件下,完成不同的功能 。
【例】
#define R 1
main(){
float c,r,s;
printf ("input a number: ");
scanf("%f",c);
#if R
r=3.14159*c*c;
printf("area of round is: %f\n",r);
#else
s=c*c;
printf("area of square is: %f\n",s);

推荐阅读