小编car*_*995的帖子

ANSI/ISO C++和C++/CLI有什么区别?

公共语言基础结构(CLI)由Microsoft创建,作为其.NET技术的基础,它是一种ECMA标准(ECMA-335),允许应用程序以各种高级编程语言编写,并在不同的系统环境中执行 .符合CLI的编程语言可以访问相同的基类库,并且能够编译为相同的中间语言(IL)和元数据.然后,IL进一步编译为特定于特定体系结构的本机代码.

由于这个中间步骤,不必从头开始重写应用程序.他们的IL只需要进一步编译成系统的本机代码.

系统环境的确切含义是什么?


此外,在研究Ivor Horton的Beginning Visual C++ 2008时,我注意到他表示可以使用Visual C++ 2008开发基本上不同类型的C++应用程序.这些应用程序包括:

  1. 在一台计算机上本机执行的应用程序,他称之为本机C++程序.本机C++程序是用ISO/ANSI语言标准定义的C++版本编写的.

  2. 应用程序也可以编写为在C++的扩展版本中称为C++/CLI的CLR控制下运行.这些程序称为CLR程序C++/CLI程序.

那么本机C++程序和CLR程序是什么意思?他们之间有什么区别?感谢任何专家的帮助.

c++ c++-cli

3
推荐指数
1
解决办法
4305
查看次数

JavaScript中的数组

在阅读有关JavaScript的书时,我偶然发现了一个例子:

var names = new Array("Paul","Catherine","Steve");
var ages = new Array(31,29,34);
var concatArray;
concatArray = names.concat(ages);
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么变量concatArray不需要定义为new Array()为了存储数组名称年龄的连接数据,但是当我尝试concatArray通过添加另一行代码" document.write(concatArray[0])" 来处理数组时,它就像一个数组一样工作,并向我显示存储在第一个元素中的数据.我只是想知道为什么我没有宣称它concatArray是一个新阵列,但它仍然可以作为一个整体.

javascript

3
推荐指数
1
解决办法
863
查看次数

.STACK 未在 MASM 中分配正确的大小

基于Microsoft MASM 文档,.STACK 指令的用法是

当与 .MODEL 一起使用时,定义一个堆栈段(具有段名称 STACK)。可选大小指定堆栈的字节数(默认为 1,024)。.STACK 指令自动关闭堆栈语句。(仅限 32 位 MASM。)

为了实验,我做了.STACK分配1,073,741,824 bytes (1 GB)

请注意,我在 Visual Studio 2013 控制台项目中运行代码。

.586

.MODEL FLAT

.STACK 1073741824

.DATA
a DWORD 50
b DWORD 55

.CODE
main PROC
    addLoop: mov eax, a
    push eax
    mov eax, 0
    mov ebx, b
    push ebx
    jmp addLoop
    RET
main ENDP

END
Run Code Online (Sandbox Code Playgroud)

该代码将溢出堆栈。我所做的是记下ESP寄存器的第一个地址,让代码运行直到溢出,然后ESP从第一个中减去最后一个以获得堆栈的大小。

在我的上下文中,它是00DAFEE4 - 00CB3000 + 1 = 000FCEE5. 这只是1036005 bytes (~1 …

assembly callstack masm

3
推荐指数
1
解决办法
189
查看次数

我可以使用c ++编译器来编译c源代码吗?

可能重复:
我期望用C++编译器编译C代码有什么问题?

只是好奇我是否可以使用c ++编译器来编译c源代码?无论如何还有任何编译器完全支持c99标准吗?

c c++ compiler-construction

2
推荐指数
3
解决办法
8495
查看次数

关于C数据类型和常量的问题

问候!我正在尝试使用C语言,直到遇到一些非常奇怪的事情.我无法向自己解释下面显示的结果.

代码:

#include <stdio.h>

int main(void)
{
    int num = 4294967295U;
    printf("%u\n", num);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题:

1.)如你所见,我创建了一个int可以保存-21474836482147483647之间的数字 .

2.)当我将值4294967295分配给此变量时,IDE在编译期间向我显示警告消息,因为变量溢出.

3.)由于好奇心,我在数字后面加了一个U(无符号),当我重新编译它时,编译器没有返回任何警告信息.

4.)我通过将U(无符号)更改为L(长)LL(长long)进行了进一步的实验.正如预期的那样,警告消息仍然存在于这两个但不是在我将其更改为UL(无符号长整数)ULL(无符号长多长)之后.

5.)为什么会这样?

警告信息:(对于步骤2)

warning #2073: Overflow in converting constant expression from 'long long int' to 'int'.
Run Code Online (Sandbox Code Playgroud)

警告信息:(对于步骤4 LLL)

warning #2073: Overflow in converting constant expression from 'long long int' to 'long int'.
Run Code Online (Sandbox Code Playgroud)

最后,感谢您阅读我的问题,非常感谢您的教导和建议.

c variables integer constants

2
推荐指数
1
解决办法
947
查看次数

以奇怪的方式使用#define预处理程序指令

今天我刚刚完成阅读并在C上试验如何使用#define创建清单常量,之后我想到了一些东西,下面是代码.

#include <stdio.h>
#define dummy main
#define yam {
#define apple }

int dummy(void)        //constant substitution main with dummy
yam                          // constant substitution { with yam
  printf("It works!!\n");
  return 0;
apple                           //constant substitution } with apple
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它就像魅力一样,我只是想知道为什么这样的东西不会导致任何错误,也许我可以理解为什么main()可以替换因为main是一个标识符(赋予函数,变量和常量的名称),但为什么{}也可以用符号名称代替?第二件事是,C用什么数据类型来存储这个符号常量,它不是单引号括起来的字符,""也不是整数或浮点数.

c identifier c-preprocessor

2
推荐指数
1
解决办法
304
查看次数

C int数据类型及其变体

问候,今天当我在C99标准中尝试C语言时,我遇到了一个我无法理解并需要专家帮助的问题.

代码:

    #include <stdio.h>

    int main(void)
   {
    int Fnum = 256; /* The First number to be printed out */

    printf("The number %d in long long specifier is %lld\n" , Fnum , Fnum);

    return 0;
   }
Run Code Online (Sandbox Code Playgroud)

问题:

1.)当我尝试运行此代码时,此代码提示我一条警告消息.

2.)但奇怪的是,当我尝试将说明符更改%lld%hd或者%ld,在执行期间未显示警告消息,并且在控制台上打印的值是正确的数字256,即使我,一切似乎也正常尝试使用 %u,%hu也是%lu.简而言之,当我使用long long说明符的变体时,警告消息和错误的数字打印才会发生.

3.)为什么会发生这种情况?我认为long long的内存大小足以保持值256,但为什么它不能用于打印出适当的值?

警告消息:(对于上面的源代码)

C:\Users\Sam\Documents\Pelles C Projects\Test1\Test.c(7): warning #2234: Argument 3 to 'printf' does not match the format string; expected 'long long int' but found …
Run Code Online (Sandbox Code Playgroud)

c variables int types

1
推荐指数
1
解决办法
489
查看次数

机器中内存地址的内存地址?(C语言)

今天出于好奇,我尝试了一些非常奇怪的东西:

代码 :

int num = 2;
int * point = &num;

printf("%p\n" , &point);
Run Code Online (Sandbox Code Playgroud)


问题:

1)我做的第一件事是我将变量的地址附加num到指针point,之后我printf()用来打印出指针中的地址存储point.

2)稍后,我只是尝试修改代码(Above Code)以查看它将给出的行为,即通过使用printf()打印出指针的地址point而不是打印出指针中的地址存储,point这是变量的地址num.

3)尽管地址与变量的地址不同,它仍会打印我的地址num,只是想知道这个行为是否在C标准中得到了很好的定义?为什么指针也有自己的地址因为我认为它的工作是存储其他变量地址.



感谢您花时间阅读本文.

c pointers memory-address

1
推荐指数
2
解决办法
345
查看次数

CPU架构8085和8086(以及基于8086的cpu)如何区别和分类?

阅读英特尔创造的CPU的不同谱系,我头脑中引起的许多问题需要解决.问题如下:

就8085和8086架构的不同而言,这两种架构的英特尔名称有何不同?

注意:我的朋友告诉我8085是一个8位微处理器,但8086是一个16位处理器,这使得它们彼此不同,这就是为什么,一个叫8085,另一个叫8086.但据我所知,我们现在使用的大部分CPU目前都是基于8086 cpu的80x86架构,它有32位版本,也有64位,老实说这显示我朋友的解释是错误的因为所有这些CPU仍被称为80x86架构,尽管这些位是不同的.

作为后续,80x86架构从8086继承了什么属性,为什么英特尔不会只调用CPU 8087,而是称为80186,80286,80386等?

x86 intel cpu-architecture computer-architecture cpu-registers

1
推荐指数
1
解决办法
2002
查看次数

单个结构数据成员的奇怪指针地址

我今天观察到一些奇怪的行为,代码如下:

代码 :

#include <iostream>

struct text
{
    char c;
};

int main(void)
{
    text experim = {'b'};
    char * Cptr = &(experim.c);

    std::cout << "The Value \t: " << *Cptr << std::endl ;
    std::cout << "The Address \t: " << Cptr << std::endl  ; //Print weird stuff

    std::cout << "\n\n";

    *Cptr = 'z';   //Attempt to change the value

    std::cout << "The New Value \t: " << *Cptr <<std::endl ;
    std::cout << "The Address \t: " << Cptr << std::endl …
Run Code Online (Sandbox Code Playgroud)

c++ struct pointers pointer-address

1
推荐指数
2
解决办法
191
查看次数