在Gerrit(2.8)上传代码审查的git提交时,我希望能够设置主题字段(例如g-tune-pme-reform here https://gerrit.gromacs.org/#/c/3453/3).如何从命令行完成?可以在原来的git push中完成吗?
我的应用程序希望获得一个随机数,最好是熵(如果可用),但不需要加密质量,并且希望确保在系统熵池耗尽时调用不会阻塞(例如,在服务器场中) ).我知道CryptGenRandom(http://msdn.microsoft.com/en-us/library/windows/desktop/aa379942 (v=vs.85 ) .aspx),但它在不利熵条件下的阻塞行为是未标明.在Unix上,/ dev/urandom支持这个用例.Windows上是否有相同的功能?我宁愿避免使用非系统RNG来获得非阻塞语义.
在C中,如果我有一个看起来像的函数调用
// main.c
...
do_work_on_object(object, arg1, arg2);
...
// object.c
void do_work_on_object(struct object_t *object, int arg1, int arg2)
{
if(object == NULL)
{
return;
}
// do lots of work
}
Run Code Online (Sandbox Code Playgroud)
那么编译器会在main.o中生成很多东西来保存状态,传递参数(在这种情况下希望在寄存器中),以及恢复状态.
但是,在链接时可以观察到arg1和arg2没有用在快速返回路径中,因此清理和状态恢复可以短路.链接器是否会自动执行此类操作,或者是否需要启用链接时优化(LTO)才能使此类工作正常工作?
(是的,我可以检查反汇编代码,但我对编译器和链接器的行为以及多种体系结构感兴趣,所以希望从别人的经验中学习.)
假设分析显示此函数调用值得优化,我们是否应该期望以下代码明显更快(例如,无需使用LTO)?
// main.c
...
if(object != NULL)
{
do_work_on_object(object, arg1, arg2);
}
...
// object.c
void do_work_on_object(struct object_t *object, int arg1, int arg2)
{
assert(object != NULL) // generates no code in release build
// do lots of work
}
Run Code Online (Sandbox Code Playgroud) 在CMakeLists.txt中,我想检查bzlib.h是否存在:
include(CheckIncludeFiles)
check_include_file(bzlib.h HAVE_BZLIB_H)
if(NOT HAVE_BZLIB_H)
# How can I exit cmake with an error message if bzlib.h does not exists?
endif()
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我有一个如下所示的makefile:
CXX = clang++
CFLAGS = -std=c++11
COMMON_SOURCES = file1.cpp file2.cpp
TARGET_SOURCES = main.cpp
TEST_SOURCES = run_tests.cpp test_file1.cpp test_file2.cpp
COMMON_OBJECTS = $(COMMON_SOURCES:.c=.o)
TARGET_OBJECTS = $(TARGET_SOURCES:.c=.o)
TEST_OBJECTS = $(TEST_SOURCES:.c=.o)
EXECUTABLE = build/application
TEST_EXECUTABLE = build/tests
.PHONY: all target tests
all: target tests
target: $(EXECUTABLE)
tests: $(TEST_EXECUTABLE)
clean:
rm build/tests & rm build/application &
$(EXECUTABLE): $(COMMON_OBJECTS) $(TARGET_OBJECTS)
$(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(TEST_EXECUTABLE): $(COMMON_OBJECTS) $(TEST_OBJECTS)
$(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@
.c.o:
$(CXX) $(CFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)
这让我运行make tests或者 …
我的跨平台项目上的构建系统有一个英特尔Windows C++命令行,由于检测到编译器功能集,可能有也可能没有/ Qstd = c ++ 0x.对于大多数代码库,这很好用,但是对于少量的CUDA文件,我需要禁用更新的C++方言以适应nvcc包装器编译器的约束.
我应该如何在命令行的末尾添加类似/ Qstd = c ++ 98或/ Qnostd = c ++ 0x的内容,以便它覆盖任何早期的C++方言规范?
编辑:经过教育,这些标志实际上是英特尔编译器,我发现附加/ Qstd = c ++ 98可能是正确的方法.
哪些标准文档指定了C和/或C++预处理器的行为?
维基百科建议http://www.open-std.org/JTC1/SC22/WG14/www/standards对C99有效.是吗?C++风味怎么样?