Tag: visual studio

包含位域的结构的大小在不同的编译器上是不同的

我在VS和GCC上运行了以下程序。 #include int main(void) { struct bitfield { unsigned a : 3; char b; unsigned c : 5; int d; }bit; printf(“Size = %d\n”, sizeof(bit)); return 0; } 令我惊讶的是,VS给出16作为sizeof结构,GCC给出12。 我的理解是编译器尝试在1行(Bank0,Bank1,Bank2,Bank3)中分配a , char b和c ,在另一行中分配int d 。 这似乎表明结构的大小应该是8个字节(假设是32位系统)。 谁能解释这些结果? 我在64位机器上运行。

使用declspec宏为一个函数的C2059语法错误; 没有它就编好了

我正在创建一个共享库(跨平台),但在尝试编译Windows版本时,我遇到了错误: secure_string.h(43):错误C2059:语法错误:’type’ 这与SECURESTRING_API宏有关。 它没有抱怨strlcpy和strlcat中的两个用法,但是当试图将它用于’str_from_last’时它会产生上述错误。 如果我删除它,它编译得很好,但该函数然后不从DLL导出,使其无用! 谷歌搜索没有产生(相关)结果; 有没有人遇到过这个? 我已经在Visual Studio 2008和2010上进行了测试,结果是相同的。 源文件包括string.h ,然后是这个文件 – 没有别的。 头文件: #ifndef SECURE_STRING_H #define SECURE_STRING_H /* Provide MS Builds with import/export functionality * BUILD_SECURE_STRING should be added to project preprocessor macros */ #if _WIN32 # if defined(BUILD_SECURE_STRING) # define SECURESTRING_API __declspec(dllexport) # else # define SECURESTRING_API __declspec(dllimport) # endif #else # […]

执行输出到文本文件

我正在使用Visual Studio 2008编写C程序。我使用F7编译和F5执行程序。当我按F5时,执行窗口包含输出。 但我希望输出保存到文本文件中。 如何在visual studio中完成此操作。 请帮帮我一个人。

VS2010 C代码 – 字符串池

当您使用以下标志进行编译时,如果在VS 2010中代码崩溃,并且如果添加/ GF-或删除opimization标志,则它们不会崩溃。 崩溃发生在转换’if(path [i] ==’/’)’的汇编代码中。 我喜欢理解编译器在这里做的优化并导致崩溃。 期待一些指示。 -Karthik cl.exe /MD /O2 test.c // Test.c #include #include void testpath(char* path, int bufsiz) { int i; printf(“%p\n”, path); for( i=0; i < strlen(path); i++ ) { if( path[i] == '/' ) { path[i] = '\\'; } } } int main() { const char* path = "testexport.prj"; […]

运行时检查失败#2 – 变量’indices’周围的堆栈已损坏

我想我知道问题是什么。 我只是很难调试它。 我正在使用directx api,我正在尝试根据我的书生成沿x和z轴的平面。 问题是我在创建索引时。 我想我设置的值超出了indices数组的范围。 我只是很难弄清楚我做错了什么。 我不熟悉这种生成飞机的方法。 所以对我来说有点困难。 下面是我的代码。 重点关注指数循环。 [编辑]我一直在审查它。 这就是指数的运作方式 int curVertex = x + (z * NUM_VERTSX); 这总是得到起点顶点。 所以说我们在x轴上有17个顶点,在z轴上有17个顶点,我们在x和z轴的第一个环上 curVertx = 0 +(0 * 17)curVertx = 0 + 0 = 0 假设我们在z轴的第一个循环和x轴的第二个循环 curVertx = 1 +(0 * 17)curVertx = 1+ 0 = 1 indices[curIndex] = curVertex; indices[curIndex + 1] = curVertex […]

使用Unicode行分隔符编译UTF-8编码的源

使用最新版本的Microsoft Compiler(包含在Win7 SDK中),我试图编译一个使用UTF-8编码的源文件和unicode行分隔符。 不幸的是,即使我在文件的开头包含UTF-8签名,代码也不会编译。 例如,如果我尝试编译它: #include int main (void) { printf(“Hello!”); return 0; } 我会看到以下错误: 提示> cl test.c Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01 for 80×86版权所有(C)Microsoft Corporation。 版权所有。 test.c test.c(1):警告C4067:预处理器指令后面的意外令牌 – 预期换行符Microsoft(R)Incremental Linker Version 9.00.30729.01版权所有(C)Microsoft Corporation。 版权所有。 /out:test.exe test.obj LINK:致命错误LNK1561:必须定义入口点 以前有人遇到过这个问题吗? 有解决方案? 谢谢! 安德鲁

FindFirstFile和FindNextFile问题

输出: The first file found is LOG_09.TXT Next file name is LOG_10.TXT Next file name is LOG_11.TXT Next fi (cut off word “file”?) function: //Find last modified log file hFind = FindFirstFile(“..\\..\\LOGS\\LOG*.TXT”, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { printf (“FindFirstFile failed (%d)\n”, GetLastError()); return; } else { printf(“The first file found is %s”,FindFileData.cFileName); //List all […]

如何在32位计算机上与VS 2005交叉编译64位DLL?

使用Visual Studio 2005,我在C中编写了一个简单的DLL,它使用Windows API发送UDP数据报,并将其连接到第三方程序。 在64位计算机上,它根本不起作用,因为在这种情况下第三方代码编译为64位。 所以我需要发送同一个DLL的两个版本 – 一个用于32位,一个用于64位。 但是,我没有设法让Visual Studio(在32位机器上运行)吐出一个与32位版本不同的DLL – 似乎只是忽略了项目属性中的“机器”设置。 一位同事告诉我,VS 2008在这种情况下只是拒绝交叉编译。 这根本不可能吗?

Visual Studio使用下划线前缀为符号构建OpenSSL

我正在尝试向Visual Studio 2013中添加一个项目,该项目将在Visual Studio GUI中构建OpenSSL。 我正在使用“makefile”项目设置作为起点。 我已经成功地在Visual Studio命令行窗口上构建OpenSSL,并且它可以工作。 但是,当我尝试使用我在命令行中使用的完全相同的命令通过项目构建OpenSSL时,我得到链接错误(LNK2001)。 使用dumpbin查看生成的.lib文件,我看到当我通过GUI构建OpenSSL时,下划线(’_’)会附加到所有导出(因此,一个名为BIO_read的函数将变为_BIO_read )。 微软有关于LNK2001的说法: https ://msdn.microsoft.com/en-us/library/f6xx1b1z.aspx ? f = 255 & MSPPError = -2147217396 具体来说,它说: 当符号未解析时,您可以通过以下准则获取有关该function的信息: 在x86平台上,用C编译的名称或C ++中的extern“C”名称的调用约定装饰是: __cdecl 函数具有下划线(_)前缀。 我认为使用稍微不同的参数调用cl会使它发出下划线前缀,但我无法弄清楚究竟有什么不同 – 命令行没有区别,如果环境变量存在差异,我找不到一个相关的。 有什么想法在这里发生了什么?

Visual Studio 2010中的Langinfo.h

如何将我的Visual Studio 2010 C项目包含在langinfo.h中。 我试过#include ,但似乎VS 2010环境中没有这样的头文件。 我需要获取语言环境的开始工作日,但我现在只使用这个库。 所以,问题是如何解决我的问题:如何包含langinfo.h,或如何从工作日开始获取当前的语言环境。