Tag: visual studio

C代码编译为C ++,但不是C

可能重复: 将一些代码从C ++转换为C. 我有一些似乎是直接C的代码。当我告诉编译器(我使用Visual Studio 2008 Express)将其编译为c ++时,它编译和链接很好。 但是,当我尝试将其编译为C时,它会抛出此错误: 1>InpoutTest.obj : error LNK2019: unresolved external symbol _Out32@8 referenced in function _main 1>InpoutTest.obj : error LNK2019: unresolved external symbol _Inp32@4 referenced in function _main 代码使用Inpout.dll从并行端口读取和写入。 我有Inpout.lib和Inpout.dll。 这是代码: // InpoutTest.cpp : Defines the entry point for the console application. // #include “stdafx.h” #include “stdio.h” #include “string.h” #include […]

Visual Studio 2017是否完全支持C99?

最新版本的Visual Studio已经看到了对C99的改进支持。 最新版本VS2017现在支持所有C99吗? 如果没有,C99的哪些function仍然缺失?

为什么运行时库是编译器选项而不是链接器选项?

我正在尝试使用visual studio 2005构建一个C / C ++静态库。由于运行时库的选择是一个编译选项,我不得不构建我的库的四个变体,一个用于运行时库的每个变体: / MT – 静态运行时库 / MD – DLL运行时库 / MTd – 调试静态运行时库 / MDd – 调试DLL运行时库 这些是编译器选项,而不是链接器选项。 来自Linux背景,这看起来很奇怪。 不同的运行时库是否有不同的调用约定? 为什么不能在链接时解析不同的运行时库,即当我链接使用我的静态库的应用程序时?

如何在VS2008中指定64位无符号int const 0x8000000000000000?

我读了关于整数常量的Microsoft特定后缀“i64”。 我想做一个UNSLigned转到ULONGLONG。 ULONGLONG bigNum64 = 0x800000000000000i64 >> myval; 在正常的C中,我会使用后缀“U”,例如类似的32位操作 ULONG bigNum32 = 0x80000000U >> myval; 我不希望2的补码符号扩展通过高位传播。 我想在64位常数上进行UNSIGNED转换。 我认为我的第一个声明是要做一个SIGNED右移。 我尝试了0x800000000000000i64U和0x800000000000000u64但是遇到了编译器错误。

使用float格式说明符打印int变量

int main() { int a=5; float b=7.5; printf(“%d %f\n”,a,b); printf(“%d %f\n”,a,a); return 0; } 当我在gcc编译器中编译这个输出时是 5 7.500000 5 7.500000 但是在视觉工作室中,输出是 5 7.500000 5 0.000000 我无法理解gcc编译器输出。

内联汇编跳转错误

一旦Masm达到jmp,为什么会失败呢? struct gdt_entry { unsigned short limit_low; unsigned short base_low; unsigned char base_middle; unsigned char access; unsigned char granularity; unsigned char base_high; }; struct gdt_ptr { unsigned short limit; unsigned int base; }; struct gdt_entry gdt[3]; struct gdt_ptr gp; void gdt_flush() { __asm{ lgdt [gp] mov ax, 0x10 mov ds, ax mov es, ax mov […]

我可以定义一个环境变量并在条件编译中使用它吗?

我知道我可以在* .h文件中执行此操作: #ifdef _DEBUG #pragma comment(lib, “libtiffd.lib”) #else #pragma comment(lib, “libtiff.lib”) #endif 但我想要一种方法,我可以做这样的事情: #ifdef V2.4.6 #ifdef _DEBUG #pragma comment(lib, “opencv_calib3d246d.lib”) #else #pragma comment(lib, “opencv_calib3d246.lib”) #endif #else #ifdef _DEBUG #pragma comment(lib, “opencv_calib3d249d.lib”) #else #pragma comment(lib, “opencv_calib3d249.lib”) #endif #endif 和V2.4.6是一个环境变量。 我可以这样做吗? 我不想在Visual Studio或代码中定义V2.4.6,因为它在不同的系统上会有所不同。

如何在openCL中将char *类型转换为int *

任何人都可以告诉我如何在OpenCL内核函数中对一个指向int*的char*指针进行类型转换? 我试过((int*) char_pointer)但它没有用。

我在哪里获得arpa / inet.h?

问题很简单。 我需要一个工具将char*转换为ip地址并使用它 sockaddr_in.s_addr arpa / inet.h有inet_addr()函数,但是我不确定我是否已经在MS VS 2010安装中的某个地方使用过这个文件,或者我应该在其他地方使用它。

为什么Visual Studio中的连续int数据类型变量位于12个字节偏移?

要澄清这个问题,请观察c / c ++代码片段: int a = 10, b = 20, c = 30, d = 40; //consecutive 4 int data values. int* p = &d; //address of variable d. 现在,在visual studio(2013年测试)中,如果p == hex_value的值(可以在调试器内存窗口中查看),那么,您可以观察到,其他变量a,b,c和d的地址是每个都有12个字节的差异! 那么,如果p == hex_value ,那么它如下: &c == hex_value + 0xC (注意hexC是十进制的12) &b == &c + 0xC &a == &b + 0xC 那么,为什么有12个字节的偏移而不是4个字节 […]