C语言教程-1_0-常见问题汇总

ps:如果各位有遇到什么经典问题,欢迎在下面评论区@我,我会进行补充,谢谢~

常识篇

指的是编程应该有的常识~

字符分类

字符

在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息.

一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等.

字符集

不同的字符集包含的字符个数不一样、包含的字符不一样、对字符的编码方式也不一样.

常见的字符集有:

  • GB2312:中国国家标准的简体中文字符集.
  • ASCII:只包含了128个字符,主要为英文字符,阿拉伯数字和一些简单的控制字符.
  • GBK字符集.在GB2312的基础上添加了部分字符,就形成了GBK,完全兼容GB2312.
  • Unicode字符集.国际标准字符集,可以容纳一百多万个字符.

ASCII字符集

C语言代码仅使用ASCII字符集构成(不考虑字符串).

分成可见字符不可见字符,即一些控制字符和正常的英文字母,数字标点等可见字符.

其中空格' ',制表符'\t',换行符'\n',回车符'\n',虽然为可见字符,但是是空白字符.

scanf()函数的%s格式控制符在遇到空白字符时会停止.

软件篇

概念的分辨

IDE,编译器,编辑器他们不是一个东西……

IDE:即集成开发环境(Integrated Development Environment),是一个集成的软件,不仅仅可以进行代码的编辑,一般还默认集成了某种(或多种)编译器进行代码编译,还包括了调试功能,甚至还会有代码仓库的管理,协同开发等高级功能,一般较为庞大,不过也有DevC++这样的小型IDE.

常见的IDE有Visual Studio(VS),CLion,Devc++,Xcode等等.他们有的是免费软件,但更多的是收费软件,具体见官方网址.

编译器:即编程语言的编译工具,用于将源代码转为可执行代码,编译器几乎都是方便易用的,而且几乎都是免费的,下载即用.C/C++常用编译器仅有3种:GCC(Linux下,windows移植于Mingw工具链),Clang/LLVM,MSVC(微软家的编译器,VS系列IDE默认的编译器).

编辑器:就跟windows下的记事本一样的…敲代码用的,只不过像VScode,Sublimetext3,Notepad++这样的高级编辑器十分强大,内置了许多高级的编辑功能,而且往往可以通过安装扩展来支持各种其他功能,往往能直接配置编译器进行代码的编译运行,所以甚至可以被改造为一款IDE.

IDE使用

VS配置C/C++环境并创建项目

  1. 2023年了,就别用VS2019,VS2022之前的版本了…

  2. 安装的时候只在工作负荷选一个使用C++的桌面开发,其他的什么都不动!

image-20231218000958855
  1. 创建项目注意一定是C++的,天天都有人问为什么不能跑代码,一看创建的是C#项目…
image-20231218000442912
  1. 配置项目名和路径,最好找一个目录,专门存每次的代码,例如D:\code\My_VS_Code\
image-20231218000630109
  1. VS编写C代码不能使用scanf等函数,解决方法见:

C语言教程-2-环境搭建

  1. 一个项目只对应一个程序,一个程序只能有一个main()入口,哪怕你在一个项目里开了一堆源文件,也只能保留一个main(),因为这些源文件属于一个程序,不理解请移步谷歌搜索C语言多文件编程
  2. 待补充

编译器使用

gcc/g++编译

高级文本编辑器配置

VSCode配置C/C++的基本编译/运行调试环境

首先,刚接触C的新手建议离开,一定程度上熟悉了编程的萌新可以逝逝.

VScode的项目设置由目录下的.vscode中的json配置文件控制,我们需要配置3个文件:

c_cpp_properties.json,tasks.json,launch.json

c_cpp_properties.json为C/C++语言相关的一些配置参数;

tasks.json为任务配置文件,其中的每一个子项就是一个任务,我们可以将各种编译任务在这里配置.

launch.json为启动配置文件,用于启动编译后的程序,进行运行或调试;

c_cpp_properties.json

使用这个配置文件对C/C++源文件进行编译选项和环境的配置.

{
    "configurations": [
        {
            "name": "Win32", // 表示这个配置项是为 Win32 平台准备的
            "includePath": [ // 指定了用于查找头文件的目录
                "${workspaceFolder}/**" // 将会包含工作区文件夹下的所有子目录
            ],
            "defines": [ // 定义宏的数组,这些宏将在编译过程中生效
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0", // 指定 Windows SDK 版本的配置项
            "compilerPath": "<path>/mingw64/bin/g++.exe", // 指定编译器路径的配置项,指定了g++编译器的完整路径,这里的<path>是你的mingw安装路径
            "cStandard": "c17", // 指定C17标准
            "cppStandard": "c++17", // 指定C++17标准
            "intelliSenseMode": "windows-gcc-x64" // 使用 Windows 平台上的 GCC 编译器进行 IntelliSense 代码补全和语法检查
        }
    ],
    "version": 4
}

tasks.json

这个文件配置了各种任务,我们进行编译操作的配置.

{
    "version": "2.0.0",
    "tasks": [ // 该列表的每一项都是一个任务
        {
            "type": "cppbuild", // 类型
            "label": "C++ Build", // 重要,任务名
            "command": "<path>/mingw64/bin/g++.exe", // 调用g++对C++进行编译
            "args": [ // 命令行参数
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-std=c++11", // C++11标准
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "<path>/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "使用 g++ 进行c++单个文件的编译"
        },
        {
            "type": "cppbuild",
            "label": "C Build",
            "command": "<path>/mingw64/bin/gcc.exe", // 调用gcc对C进行编译
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-std=c11", // C11标准
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "<path>/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "使用 gcc 进行c语言单个文件的编译"
        },
        {
            "type": "cppbuild",
            "label": "c/c++ debug", // 这个任务专门用于调试
            "command": "<path>/mingw64/bin/g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "<path>/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ]
}

launch.json

这里是启动配置,这里配置了调试的配置信息.

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++ debug", // 启动配置的名称
            "type": "cppdbg", // C++的debug
            "request": "launch",
            // inner shell
            "program": "${fileDirname}//${fileBasenameNoExtension}.exe", // 启动对应的程序
            "args": [],
            // 这里可以用于在外部运行
            // outer shell
            // "program": "C://Windows//System32//cmd.exe",
            // "args": [
            //     "/c",
            //     "${fileDirname}//${fileBasenameNoExtension}.exe",
            //     "&",
            //     "echo.",
            //     "&",
            //     "pause",
            // ],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false, //设置是否启动外部控制台
            // "avoidWindowsConsoleRedirection": true,
            "MIMode": "gdb",
            "miDebuggerPath": "<path>/mingw64/bin/gdb.exe", // gdb调试器的路径
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "c/c++ debug" // 十分重要,在启动前需要运行的任务,该任务参见前面的task.json中的对应任务,即在启动调试前先进行编译
        }
    ]
}

代码篇

输出中文乱码

以"小熊猫C++"IDE为例.

image-20231226153023590

检查右下角是否为UTF-8编码,如果是,则需要转换为ANSI编码:

image-20231226153513381

其他软件类似,这种问题就是GBKUTF-8编码不兼容的问题.

Windows默认GBK编码,因此兼容性不佳(一般都是用UTF-8编码比较常见).

输入输出

字符串操作

栈溢出与安全问题

风格篇

代码格式化

posted @ 2024-01-24 17:21  WA-HAHA  阅读(43)  评论(0)    收藏  举报