c语言编程用的符号有哪些

c语言编程用的符号有哪些,第1张

如果真正掌握了C 语言,你就能很轻易的回答上来。这个问题就请读者试着回答一下吧。本章不会像关键字一样一个一个深入讨论,只是将容易出错的地方讨论一下。

表(2.1)标准C 语言的基本符号

C 语言的基本符号就有20 多个,每个符号可能同时具有多重含义,而且这些符号之间相互组合又使得C 语言中的符号变得更加复杂起来。

你也许听说过“国际C 语言乱码大赛(IOCCC)”,能获奖的人毫无疑问是世界顶级C程序员。这是他们利用C 语言的特点极限挖掘的结果。下面这个例子就是网上广为流传的一个经典作品:

#i nclude <stdio.h>

main(t,_,a)char *a{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,

main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\#q#n+,/+k#*+,/'r :'d*'3,}{w+K w'K:'+}e#'dq#'l \q#'+d'K#!/+k#q#'r}eKK#}w'r}eKK{nl]'/##q#n'){)#}w'){){nl]'/+#n'd}rw' i# \){nl]!/n{n#'r{#w'r nc{nl]'/#{l,+'K {rw' iK{[{nl]'/w#q#n'wk nw' \

iwk{KK{nl]!/w{%'l##w#' i:{nl]'/*{q#'ldr'}{nlwb!/*de}'c \{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \}'+}##(!!/"):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1):0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,"告早!ekdc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-Om.vpbks,fxntdCeghiry"),a+1)}

还没发狂?看来你抵抗力够强的。这是IOCCC 1988 年获奖作品,作者是Ian Phillipps。

毫无疑问,Ian Phillipps 是世界上最顶级的C 语言程序员之一。你可以数数这里面用了袜芦雀多少个符号。当然这里我并不会讨论这段代码,也并不是鼓励你也去写这样的代码(关于这段代码的分析,你可以上网查询哗橡)。

我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下:

1. 预处理程序

按照ANSI标和拍激准的定义,预处理程序应该处理以下指令:

#if #ifdef #ifndef #else #elif

#endif

#define

#undef

#line

#error

#pragma

#include

显然,上述所有的12个预处理指令都以符号#开始,,每条预处理指令必须独占一行。

2. #define

#define指令定义一个标识符和一个串(也就是字符集),在源程序中发现贺培该标识符时,都用该串替换之。这种标识符称为宏名字,相应的替换称为宏代换。一般形式如下:

#define macro-name char-sequence

这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。

例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令:

#define LEFT 1

#define RIGHT 0

每当在源程序中遇到LEFT或RIGHT时,编译程序都用1或0替换。

定义一个宏名字之后,可以在其他宏定义中使用,例如:

#define ONE 1

#define TWO ONE+ONE

#define THREE ONE+TWO

宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义:

#define ERROR_MS “Standard error on input \n”

如果一个串长于一行,可在行尾用反斜线”\”续行,如下:

#define LONG_STRING “This is a very very long \

String that is used as an example”

3. #error

#error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是:

#error error-message

注意,宏串error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。

4. #include

程序中的#include指令要求编译程序读入另一个源文件。被读入文件的名字必须用双引号(“”)或一对尖括号(<>)包围,例如:

#include “stdio.h”

#include <stdio.h>

都使C编译程序读入并编译头文件以用于I/O系统库函数。

包含文件中可以包含其他#include指令,称为嵌套包含。允许的最大嵌套深度随编译器而变。

文件名被双括号或尖括号包围决定了对指定文件的搜索方式。文件名被尖括号包围时,搜索按编译程序作者的定义进行,一般用于搜索某些专门放置包含文件的特殊目录。当文件名被双括号包围时,搜索按编译程序实时的规定进行,一般搜索当前目录。如未发现,再按尖括号包围时的办法重新搜索一次。

通常,绝大多数程序员使用尖括号包围标准的头文件,双引号用于包围与当前程序相关的文件名。

5. 条件编译指令

若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。

5.1#if、#else、#elif #endif

条件编译指唤袜令中最常用的或许是#if,#else,#elif和#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。

#if的一般形式是:

#if constant-expression

Statement sequence

#endif

如#if后的常数表达式为真,则#if和#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。

#else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如:

#include <stdio.h>

#define MAX 100

Int main(void)

{

#if MAX>99

printf(“Compiled for array greater than 99.\n”)

#else

printf(“Complied for small array.\n”)

#endif

return 0

}

auto :声明自动变量

short :声明短整型变量或函数

int: 声明整型变量或唯知猜函指型数

long :声明长整型变量或函数

float:声明浮点型变量或函数

double :声明双精度变量或函数

char :声明字符型变量或函数

struct:声明结构体变量或函数

union:声明共用数据类型

enum :声明枚举类型

typedef:用以给数据类型取别名

const :声明只读变量

unsigned:声明无符号类型变量或函数

signed:声明有符号类型变量或函数

extern:声明变量是在其他文件中声明

register:声明寄存器变量

static :声明静态变量

volatile:说明变量在程序执行中可被隐含地改变

void :声明函数无返回值或无参数,声明无类型指针

if:条件语句 else :条件语句否定分支(与 if 连用)

switch :用于开关语句 case:开关语句分支

for:一种循环语句

do :循环语句的循环体 while :循环语句的循环条件

goto:无条件跳转语句

continue:结束当前循环,开始下一轮循环

break:跳出当前循环猛链

default:开关语句中的“其他”分支

sizeof:计算数据类型长度

return :子程序返回语句(可以带参数,也可不带参数)循环条件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12254781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存