只是偶然发现了一个奇怪的事情,%ERRORLEVEL%想知道是否有人知道为什么以及是否有办法解决它.从本质上讲,似乎if语句中执行的命令不设置%ERRORLEVEL%变量.的ERRORLEVEL(如IF ERRORLEVEL 1,这是从不同的IF %ERRORLEVEL% EQU 1)检查似乎还在正常工作的,所以我可能可以解决它,但它仍然是很好能够打印错误水平.用于调试或其他.
@echo off
Set TESTVAR=1
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%
ThisWillSetErrorLevelTo9009ieNotRecognizedCommand
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%
ThisWillSetErrorLevelTo9009ieNotRecognizedCommand
IF %TESTVAR% EQU 1 (
Set ERRORLEVEL=
tasklist | find /I "IsntRunning.exe" > NUL
echo INSIDE_IF ERRORLEVEL %ERRORLEVEL%
IF ERRORLEVEL 1 (
echo INSIDE_IF2 ERRORLEVEL GREQ 1 %ERRORLEVEL%
)
IF ERRORLEVEL 2 (
echo INSIDE_IF2 ERRORLEVEL GREQ 2 …Run Code Online (Sandbox Code Playgroud) 最近,有时(很少)从我们的应用程序导出数据时,导出日志包含看起来像"-1.#J"的浮点值.我无法重现它所以我不知道浮点数在二进制文件中是什么样的,或者Visual Studio如何显示它.
我试着查看printf的源代码,但没有找到任何东西(不是100%肯定我看了正确的版本虽然...).
我试过谷歌搜索但谷歌抛出任何#,似乎.我找不到任何浮动错误列表.
我正在编写一个将简单数据库与Excel工作表同步的工具.数据库中表中的每个项对应于工作表中的一行.我使用C#和Excel interop com接口将Excel工作表读入工具,然后在同步后比较项目的值(即excel表中的一列),以确保它们相等.
昨天我发现了一个比较不正确的案例:
"'<MedalTitle>' Medal - <MedalDescription>"
"<MedalTitle>' Medal - <MedalDescription>"
Run Code Online (Sandbox Code Playgroud)
第二个是我从Excel中读到的那个,你可以看到它跳过了第一个撇号.有没有办法告诉Excel将单元格视为文本(不,只是设置单元格的格式没有帮助)?
我甚至试图在VBA中复制单元格的值('hello'),如下所示:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target.Offset(1, 0).Value = Target.Worksheet.Range("b2").Value
Target.Offset(2, 0).Value = Target.Worksheet.Range("b2").Formula
Target.Offset(3, 0).Formula = Target.Worksheet.Range("b2").Formula
Target.Offset(4, 0).Formula = Target.Worksheet.Range("b2").Value
End Sub
Run Code Online (Sandbox Code Playgroud)
结果是目标细胞的价值总是你好'
如果没有办法,我将不得不做一些丑陋的事情
if (dbitem.value[0] == ''' )
{
// stuff
}
else
{
// regular comparison
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 swprintf 将字符串构建到缓冲区中(使用循环等)。
const int MaxStringLengthPerCharacter = 10 + 1;
wchar_t* pTmp = pBuffer;
for ( size_t i = 0; i < nNumPlayers ; ++i)
{
const int nPlayerId = GetPlayer(i);
const int nWritten = swprintf(pTmp, MaxStringLengthPerCharacter, TEXT("%d,"), nPlayerId);
assert(nWritten >= 0 );
pTmp += nWritten;
}
*pTaskPlayers = '\0';
Run Code Online (Sandbox Code Playgroud)
如果在测试期间断言从未命中,我可以确定它永远不会在实时代码中命中吗?也就是说,我是否需要检查 nWritten < 0 并处理它,还是我可以安全地假设不会有问题?
什么情况下可以返回-1?文档或多或少只是说明“如果功能失败”。在一个地方,我读到如果它不能匹配参数(即格式化字符串与可变参数),它将失败,但这并不让我担心。
在这种情况下,我也不担心缓冲区溢出 - 我知道缓冲区足够大。
我正在生成一个带有一些项目的VS2010解决方案(目前为4个,最终将达到10-20个).我只想要其中一个建造; 其余的应该被禁用.我可以通过进入配置管理器并取消选中我不想要的方框来手动执行此操作,但显然这不是一个好的解决方案.
有什么东西我可以添加到CMakeLists.txt文件中,这个项目会导致它执行此操作吗?搜索文档,谷歌和SO没有产生任何结果.

更新:这是我的根CMakeLists.txt,以防有助于:
cmake_minimum_required(VERSION 2.8)
add_definitions(-DCOMPILER_MSVC)
project (PDEngine)
set(LINKER_LANGUAGE CXX)
add_subdirectory (units/platform)
add_subdirectory (units/render_api)
add_subdirectory (units/memory)
add_subdirectory (units/game)
set(custom_exe "${CMAKE_CURRENT_BINARY_DIR}/units/Platform/Debug/Platform.lib2")
add_custom_command(OUTPUT ${custom_exe}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat -j $ENV{NUMBER_OF_PROCESSORS}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat
)
#add_custom_command(OUTPUT ${custom_exe_clean}
#COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat -c
#DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat
#)
add_custom_target(bam ALL DEPENDS ${custom_exe})
#add_custom_target(bamclean ALL DEPENDS ${custom_exe_clean}})
Run Code Online (Sandbox Code Playgroud)
(bam.bat的东西是基于我在这里得到的答案:如何配置CMake以使VS解决方案使用特定的构建命令行?)
这里是"平台"项目的CMakeLists.txt:
cmake_minimum_required (VERSION 2.8)
project (Platform)
set (COMPILER_MSVC 1)
include_directories(${Platform_SOURCE_DIR}/include)
file(GLOB Project_HEADERS ${Platform_SOURCE_DIR}/include/platform/*.h)
source_group("Headers" FILES ${Project_HEADERS})
add_library(Platform STATIC EXCLUDE_FROM_ALL src/*.cpp ${Project_HEADERS})
Run Code Online (Sandbox Code Playgroud) 我在复制和找到错误的原因方面遇到了很大的问题.出现似乎是完全随机的,所以我怀疑某处有一个未初始化的变量.但后来我发现了这段代码:
CMyClass obj; // A
obj.DoStuff();
if ( somebool )
{
CMyClass obj; // B
obj.DoStuff();
}
obj.DoOtherStuff();
Run Code Online (Sandbox Code Playgroud)
似乎DoOtherStuff()要么在"B"上完成,要么B.DoStuff()有时实际上在A上工作 - 即我实际上在第一个obj上调用了DoStuff().
这会发生吗?我不认为我收到了编译器警告(我现在修改了代码,希望它可能有所帮助).看起来很可能这段实际代码是我试图找到的bug的地方,但当然还有其他原因我尚未发现.
c++ ×3
c ×2
printf ×2
apostrophe ×1
batch-file ×1
cmake ×1
errorlevel ×1
excel ×1
import ×1
interop ×1
undefined ×1
widestring ×1