小编kug*_*uga的帖子

printf() std::string_view 的正确方法?

我是 C++17 和std::string_view. 我了解到它们不是空终止的,必须小心处理。

这是 printf() 的正确方法吗?

#include<string_view>
#include<cstdio>

int main()
{
    std::string_view sv{"Hallo!"};
    printf("=%*s=\n", static_cast<int>(sv.length()), sv.data());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(或者将它与任何其他 printf 风格的函数一起使用?)

c++ printf string-view c++17

16
推荐指数
2
解决办法
6187
查看次数

如何将主机目录挂载到正在运行的 docker 容器中

我想将我的 USB 驱动器安装到正在运行的 docker 实例中以手动备份一些文件。

我知道 的-v功能docker run,但这会创建一个新容器。注意:它是一个 nextcloudpi 容器。

linux mount docker

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

select仅检查fds到255,直到FD_SETSIZE

选择fds高于255然后不检查fd是否打开.这是我的示例代码:

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/select.h>

int main()
{
    fd_set set;
    for(int i = 5;i<FD_SETSIZE;i++)
    {
        printf("--> i is %d\n", i);
        FD_ZERO(&set);
        FD_SET(i, &set);
        close(i);

        int retval = select(FD_SETSIZE, &set, NULL, NULL, NULL);
        if(-1 == retval)
        {
            perror("select");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致:

--> i is 5
select: Bad file descriptor
...
--> i is 255
select: Bad file descriptor
--> i is 256
Run Code Online (Sandbox Code Playgroud)

然后应用程序阻止.为什么EBADF在FD_SETSIZE之前这不会创建256?

来自评论的请求信息:

结果prlimit是:

NOFILE     max number of open files                1024 …
Run Code Online (Sandbox Code Playgroud)

c linux select

6
推荐指数
1
解决办法
254
查看次数

Doxygen - 如何链接到Modules页面

如何链接到列出所有组的模块页面?

我知道我可以链接到modules.html,但如果我创建一个除HTML之外的格式(例如PDF),这将无法工作.

doxygen

5
推荐指数
1
解决办法
882
查看次数

CMake 测试我是否处于脚本模式

我想使用相同的 cmake 文件作为脚本和包含文件

do_something.cmake:

function(do_something)
   # do something
endfunction

if(CMAKE_IS_SCRIPTING_MODE) # this variable does not exist!
   do_something()
endif
Run Code Online (Sandbox Code Playgroud)

这样我就可以轻松地从 CMake 项目和 shell 调用我的脚本。如何才能做到这一点?

cmake

4
推荐指数
1
解决办法
1090
查看次数

不同的进程可以同时运行RDTSC吗?

不同的进程可以同时运行RDTSC吗?还是这是只有一个内核可以同时运行的资源?TSC位于每个内核中(至少您可以针对每个内核分别进行调整),因此应该可行。但是超级跑步呢?

我该如何测试?

x86 multicore intel hyperthreading rdtsc

4
推荐指数
1
解决办法
68
查看次数

删除使用 link_libraries() 添加的库

如何删除添加的库link_libraries()

是的,我知道我应该使用target_link_libraries(). 我不能,因为我必须将一个库链接到每个未来的目标。看到这个。该库是 CMake 构建的。这对于 C++/CMake 开发人员来说应该是不可见的。他不应该担心这个库。例子:

add_library(link-to-all a.cpp)
link_libraries(link-to-all)
add_executable(e1 e1.cpp) # with link-to-all
add_executable(e2 e2.cpp) # with link-to-all
unlink_libraries(link-to-all) #does not exist!
add_executable(e3 e3.cpp) # without link-to-all
# all further targets link without link-to-all!
Run Code Online (Sandbox Code Playgroud)

就我而言,link-toall 是一个实现覆盖率检查功能的库。它的启用取决于配置选项,并且应该隐式地用于所有即将到来的目标。可能会针对特定目标禁用覆盖率分析,因此我希望能够禁用它。

通过添加前缀来启用覆盖范围CMAKE_<LANG>_COMPILE_OBJECT,通过删除前缀来禁用覆盖范围。据我所知,这不能针对特定目标来完成,只能针对即将到来的目标进行全局。所以这unlink_libraries()将是一个我可以对称调用的函数。

function(enable_coverage)
   prepend_compiler();
   link_libraries(cov);
   # alternative with loosing target information/dependency
   # prepend_system_libs(<path>/libcov.a)
endfunction()
function(disable_coverage)
   reset_compiler();
   unlink_libraries(cov);
   # reset_system_libs()
endfunction()
Run Code Online (Sandbox Code Playgroud)

我可以使用CMAKE_<LANG>_STANDARD_LIBRARIES, (也可以在那里删除它),但我需要那里LOCATION的库(生成器表达式:) 。TARGET但我也会失去link-to-all. 此外,这可能会删除构建依赖项。

cmake

3
推荐指数
1
解决办法
2341
查看次数

在简短描述中加点

我得到了这个示例代码。我想在我的简短评论中加一个点。

const int myVar = 1;   //!< Doxygen very long brief\.
                       //!  Brief sentence two.
Run Code Online (Sandbox Code Playgroud)

我按照 doxygen 手册中的说明转义了点。这是行不通的。第一行很简短,第二行很详细。这是一个错误吗?

注意:MULTILINE_CPP_IS_BRIEF并且QT_AUTOBRIEFYES!我使用最新版本(1.8.9.1)。

doxygen

2
推荐指数
1
解决办法
1268
查看次数

C++标准在哪里说,并且C表示相同:编译单元(.cpp文件)中的变量按声明的顺序初始化

在这里说明了

C++保证编译单元(.cpp文件)中的变量按声明顺序初始化

这对C来说是一样的吗?

你能引用C和C++的相关标准段落吗?

c c++

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

标签 统计

c ×2

c++ ×2

cmake ×2

doxygen ×2

linux ×2

c++17 ×1

docker ×1

hyperthreading ×1

intel ×1

mount ×1

multicore ×1

printf ×1

rdtsc ×1

select ×1

string-view ×1

x86 ×1