标签: cl

如何找出cl.exe的内置宏

有谁知道我怎么能找出cl.exe的内置/预定义宏?例如,对于gcc,以下命令行将列出所有编译器的内置宏

gcc -dM -E - </dev/null
Run Code Online (Sandbox Code Playgroud)

编辑:我对类似于gcc的方式感兴趣,就是"询问实际的编译器".

谢谢

c c++ macros visual-c++ cl

20
推荐指数
2
解决办法
4207
查看次数

命令行警告D9035:已弃用选项'Gm',将来的版本中将删除该选项

我收到警告消息"cl:命令行警告D9035:选项'Gm'已被弃用,并将在以后的版本中删除",同时使用Visual Studio 2017最新更新15.9.2构建我的项目.如何解决此警告?

cl visual-studio-2017

19
推荐指数
5
解决办法
6463
查看次数

在Visual Studio中使用64位编译器

我使用的是Visual Studio 2017.在一个项目中(我的目标是x64),我得到错误:C1060,编译器没有堆空间,遗憾的是在那里学习了编译时存在内存限制.

在监视CL.exe时,它确实在达到4GB之前停止.所以看起来CL.exe默认是32位应用程序,如下所示:https://docs.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual- CPP-工具集-上的命令行

阅读本页后,我安装了"通用Windows平台工作负载",希望能够访问64位版本的CL.exe.但是在编译我的项目时没有变化,我在visual studio中看不到选择编译器版本的单个选项.

我假设必须有一个解决方法,能够为一个编译单元使用超过4GB,但我现在找不到它.任何帮助将非常感激.

编辑:我在调试模式下遇到限制.编译在发布模式下运行良好.这是有道理的.

c++ cl visual-studio-2017

11
推荐指数
1
解决办法
1万
查看次数

使用函数类型语法声明成员函数

就在最近,我了解到你可以使用类似函数类型的变量语法来声明一个函数(包括方法):

using function_type = int (double);
// pre-C++11:
//typedef int function_type(double);

function_type fun_global;

struct methods
{
    static function_type mem_fun_static;
    function_type mem_fun_normal;
    virtual function_type mem_fun_virtual;
    virtual function_type mem_fun_abstract = 0;
};
Run Code Online (Sandbox Code Playgroud)

在上面的代码中

  • fun_global 是一个全球性的功能,
  • mem_fun_static是一个static成员函数,
  • mem_fun_normal 是一种普通的方法,
  • mem_fun_virtual是一种virtual方法,
  • mem_fun_abstract 是一种抽象的方法.

所有这些都采用单一的类型参数double和返回int值 - 就像function_type说的那样.

这些年来我都知道C++而且我不知道这个 - 这种语言永远不会让我感到惊讶!顺便说一下 - 这里提到的语法是什么?我没看到这个......

然而,在探索这个新功能时,我偶然发现编译器之间存在一些不一致之处.对于测试,我使用以下编译器:

  • GCC 5.4.0和7.1.0,命令行: g++ -Wall -Wextra -pedantic -std=c++14
  • Clang 4.0.1,命令行: clang++ -Wall -Wextra -pedantic -std=c++14
  • MSVC 19.10.25019(VS 2017),命令行: cl /W4 …

c++ g++ clang++ cl

10
推荐指数
1
解决办法
462
查看次数

conanfile.py、conanfile.txt、conanprofile 和 settings.yml 之间有什么区别?

我已经尝试为我的项目构建柯南包一周了。我一直在阅读文档,但有很多地方我仍然感到困惑。

我认为有4个文件非常重要:

  • 柯南文件.py
  • 柯南文件.txt
  • 柯南档案
  • 设置.yml

每个文件的用途是什么?每个文件应该位于哪里?哪些是可以互换的?

我有以下conanfile.py生成柯南包的内容:

from conans import ConanFile, CMake

class mylibConan(ConanFile):
    name = "mylib"
    version = "1.16.0"
    generators = "cmake"
    settings = "os", "arch", "compiler", "build_type"
    options = {"shared": [True, False]}
    default_options = "shared=False"
    exports_sources = ["*"]
    url = ""
    license = ""
    description = "The mylib HAL library."

    def configure(self):
        self.options.shared = False

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def package(self):
        libs_build_dir = "lib_mylib/" + str(self.settings.build_type)
        api_dir = "modules/mylib/lib/api/"
        self.copy(pattern="lib_mylib.lib", dst="lib", src=libs_build_dir) …
Run Code Online (Sandbox Code Playgroud)

c++ cmake cl conan

9
推荐指数
1
解决办法
4618
查看次数

使用/ RTC1编译时,有时会禁止警告C4701

这段代码(注意注释行):

#include <malloc.h>

#pragma warning(error: 4701)

int main(){
    char buffer[1024];
    //buffer[0] = 0;

    void *p;
    int size = 1;
    if (size < 2)
        p = malloc(size);
    free(p); // C4701
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

发出以下警告(如预期):

f:\d\warning.cpp(13) : error C4701: potentially uninitialized local variable 'p' used
Run Code Online (Sandbox Code Playgroud)

然而,当我取消分配main(),警告不再给出.我正在使用/RTC1命令行选项进行编译以启用运行时错误检查:

cl.exe /RTC1 warning.cpp
Run Code Online (Sandbox Code Playgroud)

我已经尝试了Visual C++ 2013和2015中最新的64位版本的编译器.两者都产生了相同的行为.

问题是:这是一个编译器错误,还是有解释?微软的文档提到/ RTC1可能会在给出C4701的地方给出运行时错误,但它没有说明警告被抑制.

编辑:令人费解的是,警告只有在buffer[0] = 0;没有评论时才会消失.

c++ visual-c++ compiler-bug cl

8
推荐指数
1
解决办法
526
查看次数

Visual C++优化选项 - 如何改进代码输出?

是否有任何选项(/ O2除外)来改进Visual C++代码输出?在这方面,MSDN文档非常糟糕.请注意,我不是在询问项目范围的设置(链接时优化等).我只对这个特殊的例子感兴趣.

相当简单的C++ 11代码如下所示:

#include <vector>
int main() {
    std::vector<int> v = {1, 2, 3, 4};
    int sum = 0;
    for(int i = 0; i < v.size(); i++) {
        sum += v[i];
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

Clang的libc ++输出非常紧凑:

main: # @main
  mov eax, 10
  ret
Run Code Online (Sandbox Code Playgroud)

另一方面,Visual C++输出是一个多页面的混乱.我在这里遗漏了什么,还是VS真的很糟糕?

编译器资源管理器链接:https: //godbolt.org/g/GJYHjE

c++ visual-c++ c++11 cl

8
推荐指数
1
解决办法
1744
查看次数

gcc和clang抛出"没有匹配的函数调用",但msvc(cl)编译并按预期工作

我编写了一个小函数模板,它将新容器中的不同容器连接起来:

#include <vector>
#include <unordered_set>
#include <string>
#include <iostream>
#include <iterator>

namespace impl
{
    template <typename OutIterator, typename Container, typename ...Containers>
    void join(OutIterator iterator, const Container& container, const Containers& ...containers)
    {        
        for (const auto& item : container)
            *iterator++ = item;

        join(iterator, containers...);  // gcc and clang cannot resolve this call
    }

    template <typename OutIterator, typename Container>
    void join(OutIterator iterator, const Container& container)
    {        
        for (const auto& item : container)
            *iterator++ = item;
    }
}

template <typename OutContainer, typename ...Containers>
OutContainer …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang cl c++17

8
推荐指数
1
解决办法
285
查看次数

Google GSutil创建文件夹

如何使用gsutil命令在Google云存储中的存储桶中创建新文件夹?

我尝试在创建存储桶时使用相同的命令但仍然出错

gsutil mb -l us-east1 gs://my-awesome-bucket/new_folder/
Run Code Online (Sandbox Code Playgroud)

谢谢!

gsutil google-cloud-platform cl

7
推荐指数
2
解决办法
8577
查看次数

IEEE 754:带有 fesetround() 的 sqrtf():编译器之间的不同结果:0x42440a72 与 0x42440a73

#include <stdio.h>
#include <stdint.h>
#include <fenv.h>
#include <math.h>

int main()
{
    typedef union { uint32_t u; float f; } ufloat;
    ufloat val;
    float arg = 2401.999999;
    int r;
    r = fesetround(FE_DOWNWARD);
    val.f = sqrtf(arg);
    printf ("FE_DOWNWARD   %22.13a [0x%x] %d\n", val.f, val.u, r);
    r = fesetround(FE_TONEAREST);
    val.f = sqrtf(arg);
    printf ("FE_TONEAREST  %22.13a [0x%x] %d\n", val.f, val.u, r);
    r = fesetround(FE_TOWARDZERO);
    val.f = sqrtf(arg);
    printf ("FE_TOWARDZERO %22.13a [0x%x] %d\n", val.f, val.u, r);
    r = fesetround(FE_UPWARD);
    val.f = sqrtf(arg);
    printf ("FE_UPWARD     %22.13a [0x%x] …
Run Code Online (Sandbox Code Playgroud)

c floating-point rounding ieee-754 cl

7
推荐指数
1
解决办法
100
查看次数