在Windows使用clang编译器

在Windows使用clang编译器,第1张

从VS2019 16.2开始,有了一种更方便的在Windows里使用clang的方法:vs自带了llvm(clang),不在需要各种手动安装和项目配置了。

在vs installer中,选中clang

在项目配置里,配置一下,即可。

详见 Clang/LLVM support in Visual Studio projects | Microsoft Docs

第一个的话,可以参考标准文档Templates文档14.6.1 Locally declared names

A template-parameter shall not be redeclared within its scope (including nested scopes). A template- parameter shall not have the same name as the template name.

[Example:

template<class T, int i>class Y {

int T// error: template-parameter redeclared

void f() {

char T// error: template-parameter redeclared

}

}

template<class X>class X// error: template-parameter redeclared

—end example ]:

然后有意思的是,Clang的源代码非常不厚道的指出了VC++这不符标准的一点, clang: SemaTemplate.cpp Source File

00442 /// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining

00443 /// that the template parameter 'PrevDecl' is being shadowed by a new

00444 /// declaration at location Loc. Returns true to indicate that this is

00445 /// an error, and false otherwise.

00446 void Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {

00447 assert(PrevDecl->isTemplateParameter() &&"Not a template parameter")

00448

00449 // Microsoft Visual C++ permits template parameters to be shadowed.

00450 if (getLangOpts().MicrosoftExt)

00451 return

00452

00453 // C++ [temp.local]p4:

00454 // A template-parameter shall not be redeclared within its

00455 // scope (including nested scopes).

00456 Diag(Loc, diag::err_template_param_shadow)

00457 <<cast<NamedDecl>(PrevDecl)->getDeclName()

00458 Diag(PrevDecl->getLocation(), diag::note_template_param_here)

00459 return

00460 }

00461

00462 /// AdjustDeclIfTemplate - If the given decl happens to be a template, reset

00463 /// the parameter D to reference the templated declaration and return a pointer

00464 /// to the template declaration. Otherwise, do nothing to D and return null.

00465 TemplateDecl *Sema::AdjustDeclIfTemplate(Decl *&D) {

00466 if (TemplateDecl *Temp = dyn_cast_or_null<TemplateDecl>(D)) {

00467 D = Temp->getTemplatedDecl()

00468 return Temp

00469 }

00470 return nullptr

00471 }

至于第二个的话,改成C++11的enum class就对了,enum是不对的,因为enum是没有自己的scope的,enum class才有。

你从vim的官网下载相应的插件,一般插件都有安装说明,另外自动补全的插件vim上有很多,vim在windows平台上叫gvim,插件一般在plugin目录。。。.YourCompleteMe使用说明-for-windows2.本程序YCM部分使用的几乎是该作者提供的文件。3.使用步骤:a.确保电脑上安装有python2.7,并且python.exe在path目录里。b.在_vimrc中注释掉neocpmplete插件,反注释YourCompleteMe.c.打开vim,输入命令:YcmDebug.如果有看到clang版本信息号,serverrunningat,serverprocessID等即表示YCM已经可以使用。d.对于C++补全,首先确保电脑上安装有MinGW或者CLang(折腾去吧)。然后运行如下命令找到C++的库文件:gcc:POSIXshell:g++-E-xc++--vsearchstartshere:和Endofsearchlist.之间的路径就是C++库路径。按照默认配载的格式添加进去。你也可以直接下载我克隆的MinGW,把它放在C盘根目录,再把MinGW/bin目录加到path中。e.经测试,XP系统YCM不可用。WIN7X86和64可以正常使用。原因未知。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/9905372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存