vscode学习C语言

vscode运行C程序

下载mingw,环境变量配置

安装位置: C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0 C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0
但是总是安装不上,显示 incorrectly安装失败.
参考:[wingw-w64安装时 the file has been downloaded incorrectly!_wlngw-w64_kit101z的博客-CSDN博客]
直接下载win32,x86_64,seh文件,然后把文件解压,并把bin文件放在环境变量中.
使用gcc -v进行测试.
下载mingw地址:https://sourceforge.net/projects/mingw-w64/files/

直接使用gcc编译与调试

我认为,vc++等集成开发环境就是把gcc的命令行变成了按钮的形式,自从尝试了python的pdb模块之后,我感觉最原始的命令行调试非常好用。所以本小节尝试使用gcc命令操作C语言。

显示汉语的问题

还是不能显示汉语,就是因为utf-8和gbk之间的差距.这个可以修改vscode编写的时候就使用gbk.或者说不用管了,不影响.

执行一闪而过

#include
printf("\n");
system("pause");
这样就好了
执行的过程
gcc file(c) -o file2(exe)   .\file2

gdb调试

参考:GDB使用详解
记得使用参数g生成编号的运行程序;使用gdb时记得start,不然无法执行;常用的命令 s,n执行,b,d断点与删除;p打印变量.

VSCode使用c插件

参考:https://blog.csdn.net/Grantr/article/details/105939529
我知道会生成.vscode 文件,里边会修改一些调试或者执行的设置.但是如何设置我也没弄好.
参考一个人说,就是因为文件路径中有中文,我修改文件路径后,直接可以了.
之后,我把参考别人修改的.vscode 全部去掉,按照vscode的提示,也是可以调试的,就是说不用自己设置,按照vscode提示来就可以.

VSCode调试感悟

其调试插件比gdb要好用很多,可以确定,使用python的vscode调试插件也会比pdb要效果好很多.
头文件编写
参考:C语言自定义头文件
其实多个文件联动和写头文件一样,要么写h和c分开,要么全写在h文件中.
多个文件联动
如何编译两个文件,首先两个文件中必须有一个main函数
我成功了一次:gcc main.c function.c
我认为就是把.o文件链接起来就可以:

gcc -c .\main.c
 gcc -c .\function.c
 gcc main.o .\function.o -o li.exe
.\li.exe

.o文件就是object文件,就是win中的ddl文件,就是动态连接用的
假如里边没有main文件,或者都有main文件就会编译.
其实function.h中写入函数也行,如果不想在.h中写入函数,就建立function.c文件,.h文件中只生成函数即可.
参考:
gcc 编译过程_gcc查看编译的详细过程_luoganttcc的博客-CSDN博客
[在同一C语言工程不同C文件之间函数调用的问题_比目鱼~的博客-CSDN博客]
[GCC 同时编译多个 C/C++ 文件_gcc编译多个c文件_wohu1104的博客-CSDN博客]

Makefile使用

其实makefile就是一个脚本,就是把一串gcc命令放在一个文件中,执行文件就自动执行gcc命令.

main: main.c function.o
    gcc main.c function.o -o main
function.o: function.c
    gcc -c function.c -o function.o
.PHONY : clean
clean:
    del *.o main.exe -rf

这个就可以执行了.注意clean使用mingw32-make clean ,win中没有rm所以使用del,没有make所以使用mingw32-make.
参考:[怎么在Windows下使用Makefile文件]很有启发.

c语言规范

参考:gcc -I -L -l区别 - 隔壁王叔叔a - 博客园

SRC=src
BIN=bin
Include=include
Lib=lib
main: $(SRC)\main.c $(Lib)\function.o
    gcc $(SRC)\main.c $(Lib)\function.o -I $(Include) -o $(BIN)\main
$(Lib)\function.o: $(SRC)\function.c
    gcc -c $(SRC)\function.c -o $(Lib)\function.o
.PHONY : clean
clean:
    del /Q $(Lib) $(BIN) 

规范了一下c语言的代码,如上所示就可以了gcc -c src\function.c -o lib\function.o;gcc src\main.c lib\function.o -I include -o bin\main .可以知道,I后边就是作为第一个寻找头文件的目录
那么链接器的作用是什么?gcc -o main main.o ../myinclude/myhead.o ,这样将两个.o文件和依赖库的文件链接起来,编程可执行的文件。
没有 myhead.h 头文件,通过 -I 选项 链接上去;g++ main.cpp -o main -I ../myinclude/;注意是头文件,就是h文件

参考:
1 www.jianshu.com
2 Makefile 学习日记(六)——.c和.h不在同路径下的编译_monkeyzh123的博客-CSDN博客

如何链接库

在调用window.h时候,总是发现有人用winmm库,经过调研可以使用如下方法调用
#pragma comment(lib, "winmm.lib")//并链接winmm.lib库

gcc .\play.c -L"C:\Program Files\mingw-w64\x86_64-7.3.0-release-win32-seh-rt_v5-rev0\mingw64\lib"  -l winmm
gcc .\play.c "C:\Program Files\mingw-w64\x86_64-7.3.0-release-win32-seh-rt_v5-rev0\mingw64\lib\libwinmm.a"
gcc .\win4.c -lwinmm  #其实这样就可以使用lwinmm库,因为它是编译器自带的库.

注意区别,winmm库就是libwinmm.a库,winmm是名称,其他都是前缀和后缀,注意-L-l调用法,-l用名称;当然直接定位库的地址是最好的.
参考
1 blog.csdn.net
2 blog.csdn.net
其实一句话就可以使用winmm
graphics.h 是 BGI 库的头文件,而 BGI 库只在非常古老的 Turbo C 上可用。有一个叫 EasyX 的库,但它只支持 MSVC 环境,而且是闭源的,(基本上)没法在 vscode 上用。
错误,一个错误"undefined reference to `__imp_PlaySoundA’,id returned 1 exit status",就是因为编译的时候没有链接库.
播放音乐参考
1 blog.csdn.net
2 C语言播放声音最简单的两种方法_c 播放声音_lynch0571的博客-CSDN博客

总结

mingw与vs的区别? 两个编译器,不兼容,例如easyx只能在vs上用.
动态链接库和静态链接库? 运行时找相应的函数就是动态,静态就是一股脑把函数一起编译.
算法的重要性? 高手扫雷700行,普通人2000行.
Win api是啥? api就是函数,也叫做接口.
句柄: 窗口的句柄就是控制窗口,也就是窗口的指针.
include就表明,include可以放许多h文件
-I h文件夹;-L link文件夹;-l 指定具体的链接库的名称,如libwinmm.a,即-lwinmm

你可能感兴趣的:(vscode,编辑器,c语言,c++)