有什么区别:
prompt$ TSAN_OPTIONS="suppressions=/somewhere/file" ./myprogram
Run Code Online (Sandbox Code Playgroud)
和
prompt$ TSAN_OPTIONS="suppressions=/somewhere/file"
prompt$ ./myprogram
Run Code Online (Sandbox Code Playgroud)
该线程消毒图书馆给人的第一情况下,如何让自己的图书馆(myprogram内使用)来读取选项中指定的文件.我读了它,并假设它应该是两个单独的行,所以运行它作为第二种情况.
在第二种情况下,库不使用该文件,其中环境变量和程序执行在不同的行上.
有什么不同?
奖金问题:第一种情况如何运行没有错误?不应该有一个; 或&&他们之间?这个问题的答案可能会回答我的第一个......
我希望每次成功构建项目时都会启动测试.如果某些测试被破坏,我希望我的构建也被打破.默认情况下,我需要通过运行ctest命令手动运行测试.CTest实际上可以构建项目,但我使用调用make来构建源代码的IDE .而且make不会运行测试.
我将此命令添加到我的根CMakeLists.txt文件,但它不起作用.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
Run Code Online (Sandbox Code Playgroud)
CMake不会返回任何错误,一切都很好,但我的自定义命令不会调用.如何在CMake中每次成功构建后运行一些东西?
更新:
我的最终解决方案是这个功能:
macro(add_unit_test target target_test)
set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
add_test(target ${CMAKE_CURRENT_BINARY_DIR}/${target_test})
endmacro(add_unit_test)
Run Code Online (Sandbox Code Playgroud)
它调用add_test并记住列表中的测试目标.此功能添加的项目中的每个测试.在根CMakeLists.txt我有这个代码:
add_custom_target( all_tests ALL
DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
COMMENT "Run tests"
POST_BUILD COMMAND ctest ARGS --output-on-failure
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
Run Code Online (Sandbox Code Playgroud)
它创建依赖于项目中所有单元测试的自定义目标.自定义命令all_tests在构建目标后运行.
我跑了 git config --global alias.ci commit --verbose
这使它如此运行git ci就像跑步一样git commit --verbose
该--verbose标志在提交消息模板中显示了一个diff,它没有被注释,因此语法高亮处理对其起作用,但是会自动识别为实际上没有提交到存储库的日志中.当然可以很长,但可以用于创建更好的提交注释.(而且,如果你不需要它,你可以忽略它.)
无论如何,如果我运行git diff,被删除的行(以' - '开头)为红色,添加的行(以'+'开头)为绿色.
如果我运行git ci,vim语法会突出显示作为常规颜色(白色)删除的行,以及添加为青色的行.
如何使vim语法高亮显示删除的红色线条和绿色?
vim状态行表示它正在编辑文件"〜/ code.git/.git/COMMIT_EDITMSG".我对vim语法高亮不太了解,但我知道它是可配置的.我不确定这种情况是如何配置的,因为我假设vim使用文件扩展来决定遵循哪些语法突出显示规则(我可能会离开这里)并且git没有给这个文件一个扩展名.
编辑:实际上,vim必须检测到这是一个git提交文件,因为它的语法将前50个字符突出显示为黄色.假设这表示什么可以很好地适合补丁的电子邮件主题行.
首先,我不是在谈论c ++ 11构造函数链接也就是构造函数委托.
类成员函数可以返回对自身(类)的引用,因此可以链接函数调用.(例如cout <<运算符如何工作以允许链调用.)
在实例化匿名对象时,可以在构造函数之外进行此类链调用.
链调用是否可以从命名对象的构造函数中进行?下面的"foo a"和"foo b"的行不能编译,所以我想知道是否有不同的语法.
#include <iostream>
using namespace std;
class foo {
public:
foo(int x) : val{x} { };
foo& inc() { ++val; return *this; }
int getVal() { return val; };
private:
int val;
};
int main() {
cout << foo(1).inc().getVal() << endl; // prints 2
cout << foo{2}.inc().inc().inc().inc().getVal() << endl; // prints 6
foo a(3).inc(); // error: expected ‘,’ or ‘;’ before ‘.’ token
foo b{4}.inc(); // error: expected ‘,’ or ‘;’ before …Run Code Online (Sandbox Code Playgroud) 使用 GCC 编译大多数东西时,我收到此错误:
/..//bin/ld: cannot find crtbeginS.o: No such file or directory
Run Code Online (Sandbox Code Playgroud)
crtbeginS.o 存在于 /usr/local/lib/gcc/x86_64-unknown-linux-gnu/6.0.0/crtbeginS.o (从 GCC 主干安装,6.0.0-主干)
我将该目录添加到 ldconfig 并运行 ldconfig,但它没有选择任何其他目录。(我在想,因为它是 .o 而不是 .so)
作为临时修复,我尝试创建指向 /usr/local/lib64/crtbeginS.o 的符号链接 - 但这给出了相同的错误。
我该怎么办,所以总是查看 /usr/local/lib/gcc/x86_64-unknown-linux-gnu/6.0.0/ 目录来查找库?
如果我运行gcc -print-search-dirs|grep "/usr/local/lib/gcc/x86_64-unknown-linux-gnu/6.0.0",它会显示库:=/usr/local/lib/gcc/x86_64-unknown-linux-gnu/6.0.0/:... 但是,这当然是 gcc 而不是 ld。
如果我运行ld --verbose | grep SEARCH_DIR,我会看到 /usr/local/lib/gcc_x86_64-unknown-linux-gnu/6.0.0 不包括在内。
我真的很想把它作为系统范围的默认值来做,所以我不必给所有的东西 -L。如果有必要,我可以从源代码构建 bintools。
Visual Studio的恐惧"锁定了其他线程." 有一个备用版本_fread_nolock,它读取"不锁定其他线程",它只能用于"线程安全的上下文中,例如单线程应用程序或调用范围已处理线程隔离".
即使在阅读了关于这两者的其他有些相关的讨论之后,如果锁定fread实现在特定的FILE结构,特定的实际文件或者对完全不同的文件的所有fread调用上,我会感到困惑.
如果您使用nolock版本,您需要提供什么级别的锁定?并行多个线程可以读取单独的文件而无需任何锁定吗?并行多个线程可以写入单独的文件而不进行任何锁定吗?或者是否涉及会损坏的全局变量或静态变量?
因此,通过使用nolock版本,您是否能够实现更好的I/O吞吐量(如果您不是不必要地移动磁头,例如读取单独的驱动器或SSD驱动器),或者可能只是减少冗余锁定单锁(应该可以忽略不计.)
VS'ifstream.read函数是否像常规fread一样工作?(我没有看到它的nolock版本.)
int main() {
#pragma warning(push)
#pragma warning(disable: 4101)
int i;
#pragma warning(pop)
}
Run Code Online (Sandbox Code Playgroud)
########################### 要么 ###################### #####
int main() {
#pragma warning(suppress: 4101)
int i;
}
Run Code Online (Sandbox Code Playgroud)
我相信其中任何一个都应该在Visual Studio 2013上进行编译,警告被视为错误,没有C4101警告(关于我是一个未引用的局部变量.)这是一个4级警告.
但是,它仍在给我警告.即使我关闭被视为错误的警告,它仍然会给我警告,尽管它编译因为没有错误.
我没有使用预编译的头文件/ stdafx.h.我看到其他一些问题,说这个pragma技术可以解决实际代码(也许它们意味着代码在头文件中,但没有指定或看起来像那样).其他一些人在stdafx.h被忽略之前含糊地说没有解释任何#pragma命令.但是' https://msdn.microsoft.com/en-us/library/d9x1s805(v=vs.120).aspx '特别提到了pragma可以在源代码中覆盖编译器选项.当然,我从来没有使用stdafx.h,更像是一个unix家伙,所以也许有一些完全基本的东西我完全不知道了.
我已经尝试过指定C4101而不仅仅是4101,并且它无法在那里处理alpha.我已经尝试指定#pragma warning(push 2),即使这会触及我不想做的所有3级和4级警告 - 甚至那仍然会给出4级警告.
这是我的编译器命令行选项: /MP /GS /W4 /Zc:wchar_t /Zi /Gm- /Od /sdl /Fd"<...>\pragmaWarning\Intermediate\vc120.pdb" /fp:precise /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /Fa"<...>\pragmaWarning\Intermediate\" /EHsc /nologo /Fo"<...>\pragmaWarning\Intermediate\" /Fp"<...>\pragmaWarning\Intermediate\pragmaWarning.pch"
如您所见,这些命令行选项省略了被视为错误的警告.
c++ pragma c-preprocessor preprocessor-directive visual-studio-2013
如何比较 CMakeLists.txt 中环境变量的值?
回显 $CXX
/usr/local/bin/clang++
Run Code Online (Sandbox Code Playgroud)
因此,CXX 在我的 /etc/profile 中正确设置。然后,在 CMakeLists.txt 中我输入:
message(status "CXX is " ENV{CXX})
if(DEFINED ENV{CXX})
message(status "CXX is defined and it is " ENV{CXX})
if(ENV{CXX} STREQUAL "/usr/local/bin/clang++")
message(status "which = /usr/local/bin/clang++")
endif()
else()
message(status "CXX is undefined")
endif()
Run Code Online (Sandbox Code Playgroud)
它输出
CXX is ENV{CXX}
CXX is defined and it ENV{CXX}
Run Code Online (Sandbox Code Playgroud)
我想修改它以便它输出
CXX is /usr/local/bin/clang++
CXX is defined and it is /usr/local/bin/clang++
which = /usr/local/bin/clang++
Run Code Online (Sandbox Code Playgroud)
...并且,作为旁注,我是否需要测试它是否已定义,或者我可以直接跳到 STREQUAL 吗?
...EQUAL 和 STREQUAL 之间有什么区别?
我更喜欢所有时间都采用 UTC,除了显示的时间。在最后一刻,它们可以转换为当地时间仅供显示。
我之前总是将 UNIX 时间戳(自纪元以来的秒数)存储在 MySQL 中的整数字段中。我正在使用别人的数据库模式,我无法更改该模式,它使用DATETIME存储原始时间甚至没有偏移量的数据库模式。
如何使用 UTC 格式的数据库检索和发送时间对象,以便数据库完全不进行任何转换?
虽然是为 PostgreSQL 编写的,但我尝试遵循 Basil Bourque 对以下问题的出色回答。我Instant在任何地方都使用它,除了他展示的我OffsetDateTime在与 JDBC 交互时使用 an ,因为它是 JDBC 4.2 保证支持的唯一现代时刻类。
我正在使用 MySQL Connector/J 驱动程序版本 8.0.27,并且我正在使用&preserveInstants=false&connectionTimeZone=UTC.
让我们看一下DATETIME数据库中存储为“2022-01-14 11:00:00”的 a,它被理解为 UTC。
resultSet.getString(columnName); // "2022-01-14 11:00:00"
resultSet.getObject(columnName, OffsetDateTime.class).toString() // "2022-01-14T11:00-04:00"
resultSet.getObject(columnName, OffsetDateTime.class).toInstant().toString() // "2022-01-14T15:00:00Z"
Run Code Online (Sandbox Code Playgroud)
当它创建 时OffsetDateTime,它会分配系统或服务器(同一台机器)偏移量“-04:00”并搞乱一切。我认为我的连接选项&preserveInstants=false&connectionTimeZone=UTC应该可以阻止这种情况。
我知道我可以立即使用 来将偏移量设置为“+00:00” .withOffsetSameLocal(ZoneOffset.UTC).toInstant(),但是如何避免这样做并让它直接创建OffsetDateTimeUTC 格式的偏移量?
我可以通过运行看到插件的可配置变量
:let
Run Code Online (Sandbox Code Playgroud)
但是,随着越来越多的安装,这将变得乏味.它们不是按字母顺序排序的.
我当然可以浏览插件的文档.
在vim中,有没有办法查看名称与模式匹配的所有变量?比如,如果我想看到包含的所有变量airline怎么办?不只是开头airline,还有前缀像b:airline_whitespace_check?
不管是否有办法建成VIM要做到这一点,是有办法管的内容:let通过grep通过一个子shell?所以这样的事情可以做到:
<magic that echos :let to subshell> | grep airline | sort
Run Code Online (Sandbox Code Playgroud)