C语言中的“六大陷阱”,你可能已经知道了两个

简介: 喜欢这篇文章的朋友可以多多收藏、点赞、关注 一条龙~

前戏
要理解一个C 程序,仅仅理解组成该程序的符号是不够的,我们还需要理解这些符号是如何组成声明、表达式、语句和程序的。今天我们就来讨论一下不一样的语法结构。

1. 正确理解函数声明
你是否见过这样的代码“((void()())0)();”,你能知道这是上面意思吗?

看不懂不用担心,下面我们来分析一下:任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。声明符从表面上看鱼表发挥有些类似,对他就只应该返回一个声明给定的结果。(void ()()0)是将常数0 转型为“指向返回值为void 的函数的指针”类型。而((void(*)())0)();就可以看成是一个函数调用,末尾的分号使得表达式成为一个语句。当然我们也可以使用typedef来世表达式更加清晰:

typedef void (*funcptr)();
(*(funcptr)0)();

2. 运算符的优先级问题
在 C语言中,运算符优先级有15个之多,如果不知道运算符的优先级我们在处理问题,分析代码时,就非常被动,那么我们可以对运算符进行简单的分组,了解各组运算符之间的相对优先级,那么记起来就相对简单了,可以简单的记做:!> 算术运算符 > 关系运算符>&&>|| > 赋值运算符。


  1. 语句结束符的分号问题
    C语言以分号“;”,作为语句结束的标志,那么如果在表达式后多写了分号,会出现什么结果呢?这个分号也许会被视作一个不会产生任何实际效果的空语句,或者编译器会因为这个多余的分号产生一条警告信息,可以根据警告信息去掉这个分号。但一个例外就是在if 或者while语句之后多写一个分号,此时原来在if或者while之后的语句即使一条单独的语句,鱼条件判断没有了任何关系。请看一下代码:
If(x > y)return;
If(x > y);return;

这两句完全是不一样的


4. Switch 语句问题
C语言中的switch,在case分支后都需要添加一个break;语句,不然会已知顺着语句执行下去,达不到我们需要的效果。


5. 函数调用
与其他程序设计语言不同,C语言要求:在函数调用时及时函数不带参数,也应该包含参数列表,因此,如果f 是一个函数,f();一个函数调用,而f;却是一个什么也不做的语句。


6. else 悬挂问题
我们经常听到说else要和if 配对使用,然而在我们写代码时,还是会经常出错,例如如下代码:
QQ_20190219190001

这段代码的本意是分为两种情况,x 等于0 不等于0,然而上面的代码表达的意思却截然不同。即 想不等于0,程序不做处理,x 等于0时,判断y的值,做出不同的处理。

-

如有侵权,请联系删除

目录
相关文章
|
6月前
|
存储 算法 程序员
C语言:基础与应用的双重魅力
C语言:基础与应用的双重魅力
|
1月前
|
Unix Java 程序员
1.2选择C语言的理由
C语言在过去的四十年里一直是重要且流行的编程语言,其成功源于用户的高度认可。尽管近年来其他语言崛起,C语言依然以其独特的优势占据一席之地。它结合了计算机科学理论与实践,支持自顶向下的规划、结构化编程和模块化设计,使得程序更易于理解和维护。C语言高效利用计算机资源,具备类似汇编语言的微调控制能力,同时具有出色的可移植性,能在不同系统间轻松迁移。此外,C语言的强大灵活性使其成为UNIX操作系统及其他编译器的基础,满足了程序员对底层硬件访问的需求。然而,使用指针可能导致难以发现的错误,需要程序员格外小心。
24 8
|
4月前
|
C语言
C语言100道基础拔高题(2)
【7月更文挑战第26天】
39 2
|
6月前
|
搜索推荐 算法 网络协议
C语言:编程之基,智慧之源
C语言是编程领域的基石,以其高效、灵活和强可移植性受到程序员喜爱。作为编译型语言,它的代码执行速度快,适合系统编程、嵌入式系统和游戏开发。C语言特点包括结构化设计、直接硬件访问和跨平台能力。应用领域广泛,如操作系统、嵌入式系统、游戏和网络编程。文中通过“Hello, World!”、斐波那契数列计算及冒泡排序算法展示了C语言的实用功能。
|
6月前
|
C语言
C语言的攻克之路
C语言的攻克之路
|
6月前
|
Unix 编译器 Linux
C语言:探索编程世界的基石
本文介绍了C语言的历史、特性及应用场景。C语言由丹尼斯·里奇发明,起初用于改善UNIX操作系统的开发,因其高效、灵活和可移植性而广受欢迎。C语言的特点包括:高效性,它能直接编译成机器码;灵活性,支持指针操作和底层编程;以及强可移植性,可在不同平台运行。常见应用包括操作系统、嵌入式系统、游戏和图形界面开发。文中还提供了一个简单的C语言代码示例,展示如何计算并打印两个整数的和。
|
自然语言处理 Unix Java
C语言的发展及特点
C语言的发展及特点
138 0
|
C语言 C++
【C语言进阶】 指针强化练习(二)
【C语言进阶】 指针强化练习(二)
62 0
|
6月前
|
算法 Unix 编译器
C语言的发展及其特点
C语言是一种广泛使用的计算机编程语言,它的起源可以追溯到20世纪70年代。作为计算机编程领域的一颗璀璨明星,C语言的发展经历了多个阶段,并在各个领域中发挥着举足轻重的作用
106 0
|
6月前
|
C语言
C语言内外部函数
C语言内外部函数
32 0