我目前正在使用显式强制转换unsigned long long并使用%llu它来打印它,但既然size_t有说明%z符,为什么没有clock_t?
甚至没有宏观.也许我可以假设在x64系统(操作系统和CPU)size_t上长度为8个字节(即使在这种情况下,他们已提供%z),但是呢clock_t?
可能重复:
双向(或反向)调试
我查了一下Omniscient Debugger(http://www.lambdacs.com/debugger/ODBDescription.html),但它特定于Java.是否有任何调试器具有与本机应用程序相同的功能,即C/C++?
我没有说清楚.我想打破虚假数据值/代码路径,然后"回滚",向后调试,直到我在代码/逻辑/设计中发现错误.
我知道我可以逐步"向前"调试,我想向后做同样的事情,因此调试器需要在每一步中保存其上下文.
我有这个代码:
int foo(void){
return 1;
}
int main(void){
static const int x = foo();
//do stuff
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个关于使用非const值初始化静态变量的错误.我认为这与const说明符有关,但事实并非如此.我结束了删除const关键字并执行此操作:
int foo(void){
return 1;
}
int main(void){
static int x = 0;
if (x == 0) x = foo();
//do stuff
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,为什么编译器只能延迟static int x变量的初始化直到它被使用,更重要的是,为什么它不能只是把它放在读写部分,只是强制它不在编译时写入?我想在我的代码中使用constAND static关键字来改进语义,但我并不关心编译器如何处理它,只是让它工作.
我对C标准的理解是错误的吗?或者我的编译器在吸吮?这是MSVC 9.0.
我在多个地方看到在定义包含目录时使用生成器表达式的引用,因此您可以在编译和安装期间为包含定义不同的位置。例如:
# Define headers for this library. PUBLIC headers are used for
# compiling the library, and will be added to consumers' build
# paths.
target_include_directories(lib PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE src)
Run Code Online (Sandbox Code Playgroud)
我正在构建一个库项目,因为我使用的是标准路径(lib/对于静态库和include/公共头文件),我希望通过设置CMAKE_INSTALL_PREFIX和使用一个简单的install()调用来逃脱,例如:
set(CMAKE_INSTALL_PREFIX "${MY_INSTALL_DIR}")
install(TARGETS myLibrary ARCHIVE PUBLIC_HEADERS)
Run Code Online (Sandbox Code Playgroud)
我的期望是这DESTINATION将是两者的默认值,所以我只是告诉 CMake 安装这些类型的文件。当然它不起作用,我需要为库和头文件显式设置目标。
所以问题仍然存在:如果我似乎INSTALL_INTERFACE无论如何都无法使用,那么开始时生成器表达式的用例是什么?
这是我的示例 CMakeLists.txt:
cmake_minimum_required(VERSION 3.12.1)
project(my_library C)
FILE(GLOB SOURCE_FILES src/*.c)
add_library(my_library ${SOURCE_FILES})
target_include_directories(my_library PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
set(OUTPUT_DIR "${CMAKE_BINARY_DIR}/output")
set(INSTALL_DIR "${OUTPUT_DIR}/my_library")
set(INSTALL_LIB_DIR "${INSTALL_DIR}/lib")
set(INSTALL_INC_DIR "${INSTALL_DIR}/include")
set(CMAKE_INSTALL_PREFIX "${INSTALL_DIR}")
install(TARGETS …Run Code Online (Sandbox Code Playgroud) 在C中,a static const int和a const int在内存方面有什么区别?
void f(int *a)
{
static const int b = 10;
const int c = 20;
*a = b + c;
}
Run Code Online (Sandbox Code Playgroud)
将b只消耗sizeof(int)?并且c,它会消耗sizeof(int)该20值,并且sizeof(int)在f执行期间加上复制指令吗?
我有一个故障的硬盘驱动器间歇性地工作.冷启动后,我可以访问它大约30-60秒,然后硬盘驱动器失败.我愿意编写一个软件来将这个驱动器备份到一个新的更大的磁盘上.我可以在GNU/Linux或Windows下开发它,我不在乎.
问题是:我只能访问磁盘一段时间,并且有些文件很大,需要的时间比要复制的要长.出于这个原因,我正在考虑将整个硬盘备份成较小的部分,例如bit trenting.在尝试阅读另一组之前,我会阅读一些兆字节并存储它.我的主循环将是这样的:
while(1){
if(!check_harddrive()){ sleep(100ms); continue; }
read_some_megabytes();
if(!check_harddrive()){ sleep(100ms); continue; }
save_data();
update_reading_pointer();
if(all_done){ break; }
}
Run Code Online (Sandbox Code Playgroud)
问题是check_harddrive()函数.我愿意用C/C++编写这个,以获得最大的API /库兼容性.我需要对文件处理程序进行一些控制以检查它们是否仍然有效,并且我需要一些东西来返回错误数据,但如果驱动器在复制过程中失败则返回.
如果我滥用"硬编码"硬件异常,C#会给我最好的结果吗?
另一种方法是测量我需要多长时间来重启我的硬盘驱动器,并编程程序只在这段时间内读取它,并标记我何时重启电源.
在这种情况下你会做什么?是否有任何工具/实用程序已经这样做了?
哦,有一个伟大的应用程序来读取坏光学媒体在这里,它被称为IsoPuzzle,它不是我的,我只是想分享一些与我的问题相关的东西.
!编辑!
一些澄清.我是家庭用户,是大学计算机工程专业的学生,我宁愿丢失数据而不是花费数千美元来恢复它.希捷的保修仍然涵盖了硬盘,但由于他们给了我5年的保修期,我想尽一切可能,直到时间用完.
当我说冷启动时,我的意思是在没有电源的情况下启动几秒钟.热启动将重新启动计算机,冷启动将关闭它,等待几秒钟然后再次启动它.由于有问题的硬盘是内置的SATA,我可以断开电源线,等待几秒钟再重新连接.
到现在为止,我将使用robocopy,我只是在寻找它,看看我如何使用它.如果我不需要编写自己的代码,而是编写脚本,那就更容易了.
!EDIT2!
我不清楚,我的驱动器是希捷7200.11.众所周知,它有一个糟糕的固件,并不总是可以通过简单的固件更新来修复(不会出现此错误).驱动器在物理上处于工作状态的100%,只是固件被拧紧,使其在几秒钟后进入无限繁忙状态.