Question:
VS或者VC里的那些工程是怎么回事?怎么使用它们创建并编译C语言或C++代码?还有那些以“#”开头的东西有什么作用?
Answer:
至于安装:
如何在Win10安装VC++6.0 ,如何用VC++6.0新建项目并写代码,以及如何安装VS2017并写代码,参考链接。
至于多文件编译以及为何每次写代码要重建项目:
这里以VC++6.0为例,从新建工程到多文件编译,可以跟着一起动手做一下:

选择工程选项卡,从上到下分别是:ATL COM AppWizard、Cluster Resource Type Wizard、Custom AppWizard、Database Project、DevStudio Add-in Wizard、Extended Stored Proc Wizard、ISAPI Extension Wizard、Makefile、MFC ActiveX ControlWizard、MFC AppWizard(dll)、MFC AppWizard(exe)、Utility Project、Win32 Application、Win32 Console Application、Win32 Dynamic-Link Library、Win32 Static Library,(以官方文档为主)简单介绍参考https://zhidao.baidu.com/question/981441449787893859.html
(中途发现一个资源网http://www.icodeguru.com/,嘿嘿嘿)
我们这里选择Win32 Console Application(Win32控制台应用程序),也就是程序后运行的那个黑框框,另外提一句,如果选Win32 Application(Win32应用程序),就是非MFC框架Windows程序,可以参考《Windows程序设计》。
在工程名称里填工程的名字,例如Test,在位置选择想要把代码存储到的位置,默认在C:\Program Files (x86)\Microsoft Visual Studio\MyProjects里


这就是一个项目的骨架了,在VC++6.0里为Source Files(源文件,以后缀名.c或.cpp结尾),Header Files(头文件,以.h结尾),Resource Files(资源文件,初期用不到,不做过多介绍)。

这里选择C/C++Header File,程序的头文件,右边选中添加到工程,文件名填以.h结尾的头文件名,位置一般默认本工程目录下即可,如果有需要可以更改到其它位置。

这里选择C++ Source File,C++源文件(C语言也选这个),然后选上添加到工程,因为是C语言程序,所以文件名以.c结尾,如果是C++程序,以.cpp结尾即可。

然后在头文件Test.h里写上程序所需要的头文件即可,每次需要添加的头文件都可以写进这个文件里,例如这样:

然后在源程序里写上以下测试代码,只需在源文件里用#include用双引号把刚才的头文件名包含进来即可,如果编译报错,找不到头文件,那么文件名正确后在引号里加入完整路径即可。

然后编译,调试,若没有错误运行这个程序。假设这次代码写完了,需要关闭,

然后正常关闭即可,等到再次使用时,打开VC++6.0

再查找范围栏里选择之前使用的工程保存的目录,然后文件类型选择工程(.dsp),再选择上次的工程如Test.dsp并双击,(名称就是上次新建的工程名,以.dps结尾),之后文件名栏里就会变成Test,接着打开就好了

如果不想使用上次代码,可以在代码开头加上#if 0,在结尾加上#endif,如图中所示,在#if 0 和 #endif 中间的代码,编译器在预编译阶段将会忽略,不会被编译。

接着就可以在#if 0 和#endif 以外的区域编写代码了,例如#if 0以上区域,#endif以下区域,之后在编译运行即可。每次需要丢弃的代码,既可以注释掉,也可以用一对#if 0和#endif 条件编译忽略掉,也可以全选,删掉(虽然不建议这么做,毕竟现在写的代码以后可能还会用到),当然以上可以都不选,而是在现有的代码基础上再添加内容。
至于多文件联合编译
以下Test.c与Test.h中的无关内容都与上面那些图一样注释掉了,没有大改动。

一般在这里定义一些自定义函数需要用到的宏,以及自定义函数的定义,例如本例中的Max()函数的定义,函数的定义形参一般不用给出形参名,只需指明类型即可,当然指定了形参名也没错。

在max.c里写入函数的定义,同时引入自己的头文件max.h,同时由于max.h里引入了Test.h,所以这里也就相当于引入了max.h和Test.h中的内容。

可以在一个单独的源文件里指定程序的入口main()函数,例如本例中的main.c,同时也要包含进用到的头文件,例如本例中的max.h中定义的Max()函数,然后编译,调试,运行即可。(在VC++6.0里把max.h中的函数声明注释掉也可运行,但在VS里跨文件,必须给出函数声明)
至于以#开头的东西,一些常用的#开头
#define 宏名 宏内容
宏定义,在编译阶段,程序中除双引号中外,出现的宏名都被宏内容所替换
#pragma once
保证文件只被编译器编译一次
#ifdef 宏名
#else
#endif
在这里解释为如果宏名被定义,则编译#ifdef 到#else中的内容,如果未定义,则编译#else到#endif中的内容。也可以不使用#else。
#if 条件
#endif
和if-else结构一样,如果条件为真,则编译之间的内容
VC++6.0环境配置


这里包含可执行文件、Include files、Library files、Source files四个内容,对我们有用的一般是Include files和Library files


Include files目录为用#include<>包含进的头文件目录,Library files目录为库文件目录,一般在预编译阶段,编译器就会按这两个目录路径栏里指定的目录从上到下依次查找,直到找到引入的头文件或库文件,否则就会报找不到头文件或缺失符号错误。
如果下载安装了最新的SDK,或者其它头文件或库文件,就需要在这里指明安装路径。
写在最后
VC++6.0的入门到这里就告一段落,如果你觉得这个IDE界面太丑,那么可以试试VS2017之类更强大,界面更加友好的,但也特别臃肿的IDE。
下一步
如果这些都掌握了,并且对开发出自己的安全工具很有兴趣,可以试试《C++黑客编程揭秘与防范》,这里能够带你入门,密码是协会名缩写
如果想更进一步,那么推荐这本书《彻底研究 黑客编程技术揭秘与攻防实战》,密码链接,同样,密码还是协会名缩写。加密的目的不是为了阻止下载,而是给协会内部一些便利与宣传
至于想写出更加强大的程序,可以试试《大话数据结构》,这里面的多种数据结构经常会用到
如果还好奇的话,国内外各大论坛总有一个,是你想要的菜
什么?你说Linux啊,布星布星,作为新手,要有新手的觉悟,知道这么多干嘛(*Φ皿Φ*),想挂科啊,还是闲得没事干啊
emmmmm,如果实在好奇的紧,可以试试《鸟哥的Linux私房菜》,然后想干嘛干嘛去
什么?觉得还不够,满足不了你的胃口?那么“Linux网络编程大礼包”送给你
然后看完了还不知道干什么?那来和我交流交流经验,分享分享心得,顺便争得面红耳赤,然后一起写出个什么好玩且有趣的东西来
不知道怎么联系我?可以在评论区里留下联系方式,说不定我会过来看。当然了,最大的可能是一段时间后我忘了这里的密码还有链接QAQ
网友评论