C语言关键字浅析

您所在的位置:网站首页 signed是c语言的关键字吗 C语言关键字浅析

C语言关键字浅析

2024-07-05 15:06| 来源: 网络整理| 查看: 265

### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ###

if,几乎很多高级语言中最常见的关键字

经典的字面意思——如果。如果发生了什么,那么会怎样,就像发出了一声来自远古的神秘叩问

人生、历史,太多这样的例子了,真想把这些例子放在今天的demo里面表示出来

 

if的作用是:

表示if分支结构。

 

1、if语句的基本结构

我们来看看最简单的if语句结构,由if关键字和后面的括号及逻辑表达式组成:

int level_1 = 540; /* 某年高考一本线 */ bool flag = false; /* 通过标志,默认没通过 */ if (yourGrade >= 540) flag = true; /* 你上了一本线 */

上面的例子中,分支语句只有一条且直接跟在if语句的后面,美观起见也可以把分支语句换行并缩进

如果分支后需要执行复合语句,则需要加上大括号:

int level_1 = 540; bool flag; if (yourGrade >= 540) { flag = true; /* 你上了一本线 */ applyUniversity(); /* 申请好大学 */ haveAGoodMeal(); /* 吃大餐 */ travel(); /* 毕业旅行 */ }

2、if语句的三种形式

有时候,在条件允许的情况下你可以有多余的选择:(形式1)

purchase(); /* 超市购物 */ if (balance < 10 && balance > lollipopPrice) /* 当会员卡余额低于10块却刚好够买棒棒糖时 */ purchaseLollipop(); /* 买一个棒棒糖 */ returnHome(); /* 回家 */

很多事情面前,人还是有两条路可以走的,比如文明地赶地铁或者公交车的时候你可能有过这样的选择:(形式2)

getOn(); /* 上车 */ if (existEmptySeat()) /* 有没有空位 */ sitDown(); /* 找个空位坐 */ else standUp(); /* 站着 */

还有很多事情面前,人有更多的选择,比如目前(2018-2019赛季)欧冠制的足球比赛:(形式3)

char result; /* 比赛结果 */ int goalOfBarca; /* 巴萨的进球 */ int goalOfJuventus; /* 尤文的进球 */ gaming(); /* 比赛 */ if (goalOfBarca > goalOfJuventus) /* 巴萨赢球 */ result = 'W'; else if(goalOfBarca < goalOfJuventus) /* 巴萨输球 */ result = 'L'; else /* 平局 */ { result = 'T'; trainning(); /* 继续训练 */ }

可以看出if如果与else关键字配合,基本能实现所有的分支选择结构,因为他们还能嵌套:

if (buyApartment) /* 想买房 */ { if (balance >= price) /* 够全款 */ { purchase(); /* 拍桌子买了 */ } else if (balance < price && balance >= deposit) /* 不够全款但够首付 */ { loan(); /* 申请贷款 */ purchase(); /* 拍桌子买了 */ repay(); /* 还贷中 */ } else /* 啥都不够 */ { earning(); /* 攒钱中 */ } } else /* 暂时不想买房 */ { renting(); /* 租房去 */ }

3、另一种带if的语法:#if

有时候我们会在很多项目的代码中看到这种if,它放在源文件前面的预处理指令处,但很多人不太清楚其含义和用法

比如Linux系统的内核文件就很多这样的语句,其实这是一种叫条件编译的东西,常见的有#if、#elif、#else、#endif、#ifdef、#ifndef

(1)含义:条件编译,顾名思义是可以告诉编译器哪些代码是在哪种条件下才编译的,它的出现主要是为了实现平台无关性,在调试、实现兼容、平台移植的时候,常用到条件编译。

(2)条件编译的第一种方法,用#if、#elif和#else配合实现:

#include #define FLAG 1 int main(void) { #if FLAG == 1 /* #if后接表达式,如果成立则编译这块下的代码 */ int a = FLAG; printf("FLAG = %d\n", a); #elif FLAG == 2 /* #elif可以理解为else if,表达式成立时编译这块代码 */ int a = FLAG; a++; printf("FLAG++=%d\n", a); #else /* 同else,上述情况没有成立时编译这块代码 */ int a = FLAG; a--; printf("FLAG--=%d\n", a); #endif /* 记得末尾加上#endif表示条件编译部分结束 */ } /* 上述条件编译的效果在于,如果#define FLAG 1是另一个文件中声明的宏, 那么本文件将根据另一个文件中声明好的宏进行选择编译。 */

比如在需要实现平台兼容性时,两个平台中的某源文件的某几个宏不同,需要源程序作出相应调整,但如果把所有平台的实现代码全部编译,会使得执行文件有很多“死区”,即本平台不能跑的代码部分。条件编译技术能使得源程序根据不同平台的不同宏,选择编译适合该平台的代码,既能保证开发人员对源代码的管理,又能在实现兼容的时候代码能被充分利用。

(3)条件编译的第二种方法,#ifdef和#ifndef:

#include #define FLAG 1 /* FLAG有定义 */ #define INDEX /* INDEX没定义 */ int main(void) { /* #ifdef表示if define,查看后面的参数是否被#define定义过了 */ #ifdef FLAG /* */ printf("FLAG has been defined.\n"); #else printf("FLAG has not been defined.\n"); #endif /* #ifndef表示if not define,查看后面的参数是否没有定义 */ #ifndef INDEX printf("INDEX has not been defined.\n"); #else printf("INDEX has been defined.\n"); #endif } /* 上述程序的运行结果是: FLAG has been defined. INDEX has not been defined. 【虽然看上去代码很多行,但其实main函数中只有两行代码被编译了】 */

 

——参考《C Primer Plus第五版》

 

相关文章:

C语言关键字浅析-else

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3