安装

软件下载关联地址(老版本要求登录,新版本是在线安装)VS2017 VS2019

Visual Studio 2022 路线图 | Microsoft Docs   (工具站MSDN, 我告诉你 - 做一个安静的工具站)

配置安装选项

VS2008按下选项 > X64编译器和工具 - VS2008配置x64平台,即64位编译器,如下:

默认安装根目录:

- VS2013:C:\Program Files (x86)\Microsoft Visual Studio 12.0

- VS2015:C:\Program Files (x86)\Microsoft Visual Studio 14.0

- VS2017:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional(专业版安装目录)

- VS2019:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional(专业版安装目录)

Visual Studio Installer

VS2017、VS2019使用在线安装,增加了Visual Studio Installer(在开始菜单里面或者下面的路径)

Visual Studio Installer:C:\Program Files (x86)\Microsoft Visual Studio\Installer

语言包:点击 安装 或者 更多-> 修改 找到语言包 选择语言(使用vcpkg需要安装英语)

VSTO:进入Installer,单个组件选项的搜索框,搜索VSTO安装

关于在线安装下载缓慢或者0B/s,可将DNS从114.114.114.114(国内的DNS地址)备用地址改成8.8.8.8或8.8.4.4(谷歌公司的DNS地址)

卸载

老版本卸载,从 Releases · microsoft/VisualStudioUninstaller · GitHub

下载Setup.ForcedUninstall.exe,并以管理员运行,输入Y,等待完成...

VS2017、VS2019可通过Visual Studio Installer卸载不同模块

编译

sln编译

脚本编译解决方案,即脚本自动编译sln文件(VS2019无VSxxCOMNTOOLS类似环境变量,需手动指定)

# VS对应的环境变量存在,并不代表已经安装,还得看devenv.exe和devenv.com是否存在
VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
VS120COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
VS2017INSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional# Visual Studio 2013 (2008 2015类似)
set VCENV="%VS120COMNTOOLS%..\IDE\devenv.com"
# Visual Studio 2017
set VCENV="%VS2017INSTALLDIR%\Common7\IDE\devenv.com"# 编译解决方案
%VCENV% G:\wesproject\wes-textengine\Src\Text.sln /ReBuild "Debug|x64"
/Out "Window-Debug-x64-log.txt"# 清理解决方案
%VCENV% G:\wesproject\wes-textengine\Src\Text.sln /Clean "Debug|x64"
/Out "Window-Debug-x64-log.txt"# 查看帮助
%VCENV% /?

nmake编译

make调用nmake,make.bat如下:

@echo offif "%1"=="check" GOTO CHECK
if "%1"=="clean" GOTO CLEANcopy /y Win32\config.h src\config.h
copy /y Win32\unistd.h examples\unistd.hnmake -f Win32\Makefile.msvc
goto END:CHECK
nmake -f Win32\Makefile.msvc check
goto END:CLEAN
nmake -f Win32\Makefile.msvc clean
goto END:END

Makefile.msvc文件参考https://github.com/erikd/libsamplerate/blob/master/Win32/Makefile.msvc

vs的makefile文件说明

# 引用shell命令,如erase和echo
-@erase -@echo
# 定义变量和引用变量
CPP=cl.exe $(CPP)
# 包含目录 VC目录和WinSDK目录
# -   VC目录VS2013包含目录如下:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
# -   WinSDK目录WinSDK8.1包含目录如下:
C:\Program Files (x86)\Windows Kits\8.1\Include\um
C:\Program Files (x86)\Windows Kits\8.1\Include\shared
C:\Program Files (x86)\Windows Kits\8.1\Include\winrt
# 库目录 VC目录和WinSDK目录
# -   VC目录VS2013库目录如下:
# --  x86
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib
# --  x64
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64
# -   WinSDK目录WinSDK8.1包含目录如下:
# --  x86
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86
# --  x64
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64

编译器直接编译

启动cmd,配置编译器cl环境

# VS2013编译器(VS2010和VS2015类似)
call "%VS120COMNTOOLS%"vsvars32.bat
# VS2017编译器
call "%VS2017INSTALLDIR%\Common7\Tools\VsDevCmd.bat"
# VS2019编译器x64架构编译器(若选择x86,可不加后面参数)
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\VsDevCmd.bat" -arch=amd64

编译链接脚本

#
cl /c /I. /Iffmpeg\include /DWIN64 /W3 /WX- /wd4996 /GS /GR /Zi /Od /MDd /EHsc /nologo main.cpp
#
link main.obj /LIBPATH:. /LIBPATH:.\ffmpeg\include /DYNAMICBASE avformat.lib avcodec.lib /DEBUG /MACHINE:X64 /SUBSYSTEM:CONSOLE /PDB:main.pdb /OUT:main.exe

调试

★ 库调试两种方式

1. 启动调试

库工程属性 > 配置属性 > 调试 > 命令

指定运行程序(包含目录和运行程序)

2. 附加调试

菜单 > 调试 > 附加到进程

从列表中指定运行程序,然后附加

★ release下调试四步设置

  1. C/C++ --> 常规 --> 调试信息格式 --> 程序数据库 (/Zi) ;
  2. C/C++ --> 常规 --> 优化 --> 优化 --> 已禁用 (/Od);
  3. 链接器 --> 常规--> 启动增量链接 --> 是 (/INCREMENTAL);
  4. 链接器 --> 调试 --> 生成调试信息 --> 生成调试信息 (/DEBUG)。

★ 调试技巧

行号右键可添加条件断点和操作断点(vs2017可以),操作断点输出 {变量名},右键变量可增加值更改中断

调试 > 窗口

模块窗口 - 可查看库名称,加载路径,是否加载符号,以及加载的符号文件,右键可加载符号

堆栈窗口 -

并行堆栈 -

显示诊断工具 -

设置

工程属性

解决方案资源管理器 > 右键工程 > 选择属性 > 属性页界面(或 主菜单 > 调试 > xxx属性 > 属性页界面)

常规

  • 输出目录               $(OutDir)
  • 中间目录               $(IntDir)
  • 目标文件名            $(TargetName)
  • 目标文件扩展名     $(TargetExt)
  • 生成日志文件         编译链接命令日志
  • 平台工具集             Visual Studio 2013 (v120)

调试

  • 命令                        启动程序全路径
  • 命令参数                 程序启动参数
  • 工作目录                 默认$(ProjectDir),通常修改为$(OutDir)
  • 环境                        PATH=$(QTDIR)\bin%3b$(PATH)或PATH=$(QTDIR)\bin;$(PATH)

C/C++

→ 常规

  • 附加包含目录          /I[路径]
  • 调试信息格式          /Zi 常用
  • 警告等级                  /W0 - /W4 /Wall IDE的默认/W3命令行默认/W1,/W禁止显示所有警告,/Wall显示所有警告
  • 将警告视为错误       /WX-
  • 多处理编译              /MP

→ 优化

  • 优化                         /Od /O1 /O2 /Ox   禁止 大小最小化  速度最小化  完全优化

→ 预处理

  • 预处理器定义           /D "_DEBUG"

→ 代码生成

  • 启动C++异常            /EHsc 同步异常处理模型
  • 运行库                      /MDd /MD /MTd /MT
  • 结构成员对齐           /Zp[数字]
  • 启用增强指令集
  • 浮点模型                  /fp:precise

→ 语言

  • 将WChar_t视为内置类型           /Zc:wchar_t   /Zc:wchar_t-
  • 启动运行时类型信息                  /GR[-] 启动RTTI(主要用于typeid和dymatic_cast)
  • C++语言标准                             /std:c++14     /std:c++17  /std:c++latest        VS2017以上

→ 高级

  • 调用约定                                    __cdecl (/Gd)   __stdcall (/Gz)
  • 编译为                                       编译为 C 代码 (/TC)   编译为 C++ 代码 (/TP)
  • 禁用特定警告                             /wd[数字]

→ 命令行

  • /source-charset:utf-8                指定原代码编码                               (VS 2015 update 2以上)
  • /execution-charset:utf-8           指定执行文件编码                            (VS 2015 update 2以上)
  • /utf-8                                        同时指定原代码编码和执行文件编码(VS 2015 update 2以上)

链接器

→ 常规

  • 启动增量链接                            /INCREMENTAL或者 /INCREMENTAL:NO(对应生成同名*.ilk文件)
  • 附加库目录                                /LIBPATH:"<目录>"

→ 输入

  • 附加依赖项                              "*.lib"
  • 模块定义文件                           /DEF:"*.def" (动态库需要导出的接口)

→ 调试

  • 生成调试信息                           /DEBUG 或者没有
  • 生成程序数据库文件                /PDB:""

→ 系统

  • 子系统                                     /SUBSYSTEM:CONSOLE 或 /SUBSYSTEM:WINDOWS
  • 堆栈保留大小                          /STACK:"2000000" 默认1MB

→ 高级

  • 导入库                                    /IMPLIB:"<生成导入库lib的路径>"
  • 目标计算机                             /MACHINE:X86或者/MACHINE:X64

也可以新建一张属性表(属性管理器中),设定用户宏,然后可以通过从父集或项目默认设置继承来设置相关项

另外: /DLL   /OUT:"*.dll"

手动:/FORCE:MULTIPLE 忽略变量多重定义

工具菜单

获取工具和功能(VS2017以上)

进入Visual Studio Installer

选项(主菜单 > 工具 > 选项 > 工具选项设置界面)

文本编辑器

→ C/C++

  • 常规       -   行号
  • 滚动条   -   使用垂直滚动条的缩略图模式

调试

→ 符号

  • 可以指定pdb搜索目录,默认会自动搜索dll库所在目录的位置

工具

发行组件

(Redistributable)

在VS的安装目录下有个VC/redist目录,里面可以找到运行库(如msvcp120.dll msvcr120.dll)和运行库安装程序

VS相关文件下载网站 https://visualstudio.microsoft.com/zh-hans/downloads/

在网页其他工具和框架可以找到最新Redistributable安装包,点击旧版本链接可找到其他版本Redistributable安装包

安装VS后后,会将相应平台库拷贝到c:\Windows\System32和c:\Windows\SysWOW64目录;

集成工具

在VS的安装目录下有个Common7/Tools目录下

- errlook.exe   通过 [Visua Studio ->工具->错误查找]   启动 ---  查看GetLastError()错误码描述

- guidgen.exe 通过 [Visua Studio ->工具->创建GUID] 启动 --- 创建GUID

VC工具

VS2013:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

进入C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts目录,点击相应图标,或执行如下命令:

# VS2013 开发人员命令提示
call "%VS120COMNTOOLS%"VsDevCmd.bat
# VS2013 x86 本机工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat x86
popd
# VS2013 x64 本机工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat amd64
popd
# VS2013 x64 兼容工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat x86_amd64
popd
# VS2013 ARM 兼容工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat x86_arm
popd
# 常用
pushd "%VS120COMNTOOLS%"..\..\VC && call vcvarsall.bat x86_amd64 && popd

最后,运行dumpbin、lib和nmake

dumpbin

- 显示COFF格式的文件信息,比如像vc编译器生成的目标文件(obj),可执行文件(exe)和动态链接库(DLLs)等。

# 查看导出接口和依赖库与库接口
dumpbin /exports FreeImage.dll
dumpbin /imports FreeImage.dll
dumpbin /imports FreeImage.exe# 查看依赖库
dumpbin /dependents FreeImage.dll# 查看dll和exe是32位还是64位 看FILE HEADER VALUES下一行是x86还是x64
#  macos下 lipo  -info *.a 或 *.dylib
# ubuntu下 file *.a 查看有无x86-64,表明是否是64位
dumpbin /headers FreeImage.dll
# 若是调试库,还能看到调试的pdb位置# 查看符号表
#  macos下 nm  -nm *.dylib
dumpbin /symbols *.lib# 查看库的公共符号
# 参数1 将按对象顺序显示符号及其偏移量。
# 参数2 将显示对象的偏移量和索引号,然后按字母顺序列出这些符号及每个符号的对象索引
# 若要两个输出都获得,指定不带数字参数
dumpbin /linkermember   *.lib
dumpbin /linkermember:1 *.lib
dumpbin /linkermember:2 *.lib

lib

# 判断lib文件对应是静态库还是动态库 结果包含obj则是静态库 结果包含dll则是动态库
lib /list hello.lib# linux下所有对象文件(.o文件)列表
ar -t hello.a

nmake

- nmake [/f makefile] [targets]

  • /?   帮助信息
  • /s   取消显示已执行的命令
  • /p   显示 NMAKE 信息
  • /nologo 不显示版权和版本号
nmake /nologo /s /f makefile.msvc

扩展工具

VAssistX番茄助手

(VS2008)

--- 默认c:\Program Files (x86)\Visual Assist X\目录;

--- 将将VA_X.dll的文件放入目录内;

(VS2012以上)

--- 找到%USERPROFILE%\AppData\Local\Microsoft\VisualStudio目录;

--- 找到VS对应目录,目录有数字代表,比如12代表2013,进入目录找到Extensions目录;

--- 找到其中有几个目录,其中一个含有VA相关文件,将VA_X.dll的文件放入目录内;

Image Watch

--- 自定义natvis文件放在C:\Users\<用户>\Documents\Visual Studio 20xx\visualizers目录

# natvis模板

处理工具

nasm和yasm

nasm.props、nasm.targets、nasm.xml和yasm.props、yasm.targets、yasm.xml存放路径

Visual Studio 2013:   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations
Visual Studio 2015:   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations
Visual Studio 2017:   C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\BuildCustomizations   (VS专业版)
Visual Studio 2019:   C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\BuildCustomizations       (VS专业版)

nasm.exe和yasm.exe

Visual Studio 2017: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC
Visual Studio 2019:  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC (x64就放64bit,如何兼容还有待研究)

特点

编译选项

优化 - release下默认开启优化

  • assert会被跳过不执行;

支持标准

VS2013 - 支持大部分c99和c++11,不支持如下:

  • 关键字inline,c不支持c99的inline,需用__line代替,但cpp支持;
  • 关键字restrict,c不支持;
  • 关键字explicit,cpp不支持c++11的explicit;
  • 支持char16_t、char32_t、u16string和u32string,但不支持u"xxx"和U"xxx"

VS2017

  • 支持u"xxx"和U"xxx"

宏定义

  • WIN32
  • __cplusplus
  • WINVER

名词解释

增量链接

启动增量链接编译,每次编译链接的时候为每个函数预留一部分空间, 编译链接时, 只是修改你修改过的函数对应的代码, 其它二进制代码保持不变,跟增量升级一个道理;没启动增量链接编译,把obj删除, 然后重新生成,若在调试得重新开始调试;

分析

sln文件

vs2013,空工程


Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
GlobalGlobalSection(SolutionProperties) = preSolutionHideSolutionNode = FALSEEndGlobalSection
EndGlobal

vs2013,添加了一个工程

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "audiodenoise", "audiodenoise\audiodenoise.vcxproj", "{8FED1CA7-C625-4D2E-BECB-34467AFB9936}"
EndProject
GlobalGlobalSection(SolutionConfigurationPlatforms) = preSolutionDebug|Win32 = Debug|Win32Debug|x64 = Debug|x64Release|Win32 = Release|Win32Release|x64 = Release|x64EndGlobalSectionGlobalSection(ProjectConfigurationPlatforms) = postSolution{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|Win32.ActiveCfg = Debug|Win32{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|Win32.Build.0 = Debug|Win32{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|x64.ActiveCfg = Debug|x64{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|x64.Build.0 = Debug|x64{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|Win32.ActiveCfg = Release|Win32{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|Win32.Build.0 = Release|Win32{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|x64.ActiveCfg = Release|x64{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|x64.Build.0 = Release|x64EndGlobalSectionGlobalSection(SolutionProperties) = preSolutionHideSolutionNode = FALSEEndGlobalSection
EndGlobal

def文件

LIBRARY  libsamplerate-0.dll
EXPORTSsrc_new         @1
src_delete      @2

快捷键

Ctrl+K Ctrl+D                                            先选中代码,代码格式化

Ctrl+U                                                       先选中代码,小写

Shift+Ctrl+U                                              先选中代码,大写

Tab                                                           先选中代码,前进一个tab键

Shift+Tab                                                  先选中代码,后退一个tab键

参考

VS2017 Devenv命令行开关

VS2017 Devenv Rebuild

MSVC工具

nmake2017

版本

WIN_VER 系统版本
0x500 Windows 2000
0x501 Windows xp
0x600 Windows vista
0x601 Windows 7
0x0602 Windows 8
0x0A00 Windows 10
名称 内部版本(MSVC++) _MSC_VER
Visual Studio 2008 9.0 1500
Visual Studio 2010 10.0 1600
Visual Studio 2013 12.0 1800
Visual Studio 2015 14.0
Visual Studio 2017 15.0
Visual Studio 2019 16.0

Visual Studio基本使用相关推荐

  1. 离线安装Visual Studio Code插件

    在使用Visual Studio Code 开发时候,有时可能会碰到需要离线安装插件的情况.这时候就需要单独下载插件包,本文就以C/C++插件包为例说明如何离线安装Visual Studio Code ...

  2. Visual Studio 中文显示乱码问题

    今天在码云上Fork了一个开源工程,编译环境是Visual Studio C++, 由于自己本地平台主要是进行Linux开发,平时文档编码格式都是utf-8的,编译没问题,但运行起来就是乱码,就像下图 ...

  3. [转]Getting Start With Node.JS Tools For Visual Studio

    本文转自:http://www.c-sharpcorner.com/UploadFile/g_arora/getting-started-with-node-js-tools-for-visual-s ...

  4. Visual Studio 2008 到底有多强?漫画告诉你 !

      插入数据需要无数个SQL语句支持,而现在,你只需要有一个强大的LinQ巴士,就直接一次性全搞定,方便快捷 "  强大的中转站,帮你解决额外的问题,数据传输选择最优路径,完成工作.数据给了 ...

  5. visual studio配置第三方库

    Visual Studio 2017 第三方依赖设置,附加依赖项和附加库目录 2018年05月21日 19:47:35 carlcarl0903 阅读数:1137 Visual Studio 2017 ...

  6. visual MySQL 教程_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...

    一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...

  7. vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...

    摘要:本文介绍了Win7 64位环境下OpenCC(Open Chinese Convert) 1.0.4源码编译全过程,除VS2017外,VS2013以上版本也应该基本同样适用,其他版本的Windo ...

  8. window环境Visual Studio配置:OpenCV,Eigen,jsoncpp

    OpenCV 一.计算机 中的配置: 在 计算机 -> 属性 -> 高级系统属性 -> 高级 -> 环境变量 -> 系统变量 -> Path 中添加: D:\Pro ...

  9. Visual Studio 2005 Team System下载地址

    注册一个msn就可以去微软下载了,关于替换序列号变成正版的方法我没有试,team suite 我在用,但Team Foundation Server 我还没有安装好 Microsoft Visual ...

  10. visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案

    一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...

最新文章

  1. php 4 创建公共的链接数据库php文件并在其它文件引用它
  2. idea main java.lang.ClassNotFoundException
  3. 澳大利亚研究者研制出一种计算机芯片 他们,快讯:几乎看不见的3D打印机器人;西澳大利亚大学的研究人员开发出一种保护生态机器鱼;效率达CPU一万倍的神经形态芯片发布!...
  4. Spring中日期格式转换
  5. java获取数组穷举_请教一下两个数组各取一个元素生成新的数组的穷举算法设计?...
  6. jni c call java_Java通过-jni调用c语言
  7. 最近很火的夏日便捷小空调源码(小程序版)
  8. delphixe2 SIZE_T=NativeUInt类型
  9. C++并发编程之std::future
  10. 谷歌称已实现量子霸权;iOS 捷径功能被诉侵权;Chrome 78 Beta 发布 | 极客头条
  11. Mybatis中是否需要依赖配置文件的名称要和mapper接口的名称一致 params错误
  12. 疫情之后,有哪些巨大的商业机会?
  13. 休宁天气预报软件测试,【休宁天气预报】休宁今天天气预报 - 天气史
  14. python发送邮件带附件_python 发送带附件邮件
  15. Pandas速查手册中文
  16. 一步一步搭建自己的web系统(一):搭建后端服务
  17. 【Hive】Hive数据倾斜以及解决方案
  18. ●「.|貓」erPhotoshop滤镜巧制超级美女插画效果
  19. java斗地主随机发牌_java实现斗地主发牌功能
  20. 基本功:线程上下文切换

热门文章

  1. conflict 冲突
  2. ALSA C语言使用
  3. 四连通 matlab,针对matlab 四连通,和八连通的详解
  4. Android系统版本与代号
  5. 关于工业镜头的景深以及分辨率
  6. MAC下使用 XMAPP 配置 php 环境
  7. “蓝桥杯”练习系统(基础篇)
  8. android 主流机型排行榜,安卓手机排行榜
  9. 这些都是我自学时私藏的学习网站/实用工具网站/技术网站,非常适合自学
  10. 安卓来电归属地_HavocOS v3.5 (Android10) ROM 使用体验,带你探索原生安卓的魅力!...