C语言 | 常见问题汇总

        面向刚开始学习C语言的同学,汇总了一些C语言常见的问题。下方蓝色的字体就是链接啦:)

一、头文件<stdio.h>与"stdio.h"的区别

二、主函数main与return 0

  1. main()、void main()与int main()我们写代码时如何选取?
  2. 为什么我们要在main函数结尾加上return 0?
  3. 带参数的main函数 int main(int argc,char *argv[])简介

三、字符输入问题与输入输出缓冲区

        为什么我们在使用getchar()或scanf输入字符时总是不能正确读入?

四、变量与类型转换

  1. C语言常见变量类型
  2. 隐式类型转换与强制类型转换
  3. 斐波那契数列:如何存储和运算超长整数 、  高精度/高精度超长整数运算除法器

五、字符串

  1. 为什么会有“烫烫烫”乱码
  2. 常见字符串操作(字符串输入输出、长度计算、参数传递)
  3. string.h头文件常用函数举例

六、指针与数组

  1. 指针概述、地址与整数的运算、指针作参数的传递、多级指针
  2. 数组概述、数组作参数的传递、多维数组
  3. 指针数组与数组指针的区别
  4. 安全地使用指针——如何避免野指针?
  5. 数组初始化的四种方法

七、动态内存分配

        单向链表的遍历,节点的插入、删除和交换

八、文件的I/O操作

  1. 文件概述、文件路径
  2. 文件的输入输出缓冲区、fopen与fclose
  3. 文件定位——文件读写指针
  4. 标准文件输入输出

九、其他

  1. ++i与i++详解,(++i)+(++i)+(++i)与(i++)+(i++)+(i++)的值
  2. Windows API入门:C语言实现彩色圣诞树


十、补充

1.bool类型未定义问题

        error:unknown type name 'bool'

原因:

该问题常见于C程序(.c文件类型)中。在C99标准之前,C语言没有定义布尔类型。而C99标准中虽然引入了_Bool关键字表示布尔类型,但仍未引入bool关键字,因此如果直接使用bool类型编译器就会报错。


解决办法:

1) 使用_Bool关键字来表示布尔类型。_Bool变量只能取0或1,其中0为假,1为真。

2) 添加stdbool.h头文件,就可以直接使用bool、true和false了。stdbool头文件为了与C++中的bool关键字兼容,定义了布尔变量的宏。

3) 使用CPP文件来存储程序(在创建项目时选择C++)。因为C++是兼容C的,对于CPP文件编译器会将其当作C++程序来编译,而C++中定义了bool关键字。

2.不同枚举类型的变量之间赋值,没有使用强制转换,编译器未报错

说明:

v1为enum enum1类型变量,v2为enum enum2类型变量, 一般我们不允许不同枚举变量之间直接赋值,除非使用强制转换。

有些C语言的教科书会告诉你,不同枚举变量之间直接赋值编译器会报错,例如“v2=v1;”“v2=A;”编译器会提示error。然而,在上述例子中编译器并没有报错


原因:

首先,我们可以在左上角看到这个程序是用.c文件存储的。如果你把代码写在.cpp文件里,codeblocks会把它当C++程序处理,调用g++来编译,C++语法更加严格,不同类型的枚举变量之间直接赋值编译器就会报错;而如果你把代码写在.c文件里,codeblocks把它当C程序处理,调用gcc来编译,C语言语法相对C++来说没那么严格,因此编译器没有报错。

总的来说,如果你想让编译器在不同枚举变量之间直接赋值时报错,在创建项目时语言就选取C++(即生成.cpp文件)。注意,即使你使用了强制转换,我们也不推荐不同枚举类型的变量之间相互赋值。


拓展:

gcc和g++都是GNU下的编译器。对于.c文件,gcc把它当C程序处理,g++把它当C++程序处理;对于.cpp文件,gcc和g++都会把它当C++程序处理。C++虽然兼容C,但C++的语法相对C来说要更加严格,所以一些能用gcc编译通过的C程序,用g++编译就会报错。

此外要注意一下 g++是可以编译C程序(.c文件)的,g++在编译C程序和C++程序时都会调用gcc,同时g++对C和C++程序都会做C++语法的检查。你可以理解为g++把C程序也当C++程序来处理了。

从某种程度上来说,gcc也是可以编译C++程序(.cpp文件)的,但需要使用g++完成C++库的链接,或者使用-lstdc++选项链接到C++的库(例如:gcc main.cpp -lstdc++)。

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易水卷长空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值