草庐IT

PORTABILITY

全部标签

c++ - 程序可移植性

如何确保我的程序完全可移植? 最佳答案 在所有目标平台上持续集成。 关于c++-程序可移植性,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3525177/

c++ - 为什么 C/C++ 代码可在不同的编译器上编译很重要?

我是对可移植性的不同方面感兴趣(正如您在浏览我的其他问题时看到的那样),所以我阅读了很多关于它的内容。很多时候,我读到/听说代码应该以一种可以在不同编译器上编译的方式编写。在没有任何gcc/g++的实际生活经验的情况下,在我看来它支持可以想象的所有主要平台,因此在g++上编译的代码几乎可以在任何系统上运行。那么为什么有人会费心让他的代码在MS编译器、英特尔编译器和其他编译器上运行呢?我也能想到一些原因。正如常见问题解答所建议的那样,我会尝试将它们作为答案发布,而不是将它们包含在我自己的问题中。编辑:结论你们让我完全相信支持多个编译器有几个很好的理由。有很多原因,很难选择一个被接受的答案

c++ - 为什么 C/C++ 代码可在不同的编译器上编译很重要?

我是对可移植性的不同方面感兴趣(正如您在浏览我的其他问题时看到的那样),所以我阅读了很多关于它的内容。很多时候,我读到/听说代码应该以一种可以在不同编译器上编译的方式编写。在没有任何gcc/g++的实际生活经验的情况下,在我看来它支持可以想象的所有主要平台,因此在g++上编译的代码几乎可以在任何系统上运行。那么为什么有人会费心让他的代码在MS编译器、英特尔编译器和其他编译器上运行呢?我也能想到一些原因。正如常见问题解答所建议的那样,我会尝试将它们作为答案发布,而不是将它们包含在我自己的问题中。编辑:结论你们让我完全相信支持多个编译器有几个很好的理由。有很多原因,很难选择一个被接受的答案

c++ - 使用指针的低位作为标志的可移植性如何?

例如,如果有一个类需要一个指针和一个bool。为简单起见,示例中将使用int指针,但指针类型无关紧要,只要它指向size()大于1的对象。使用{bool,int*}数据成员定义类将导致类的大小是指针大小的两倍,并浪费大量空间如果指针不指向一个char(或size(1)的其他数据),那么大概低位总是为零。该类可以使用{int*}或为了方便定义:union{int*,uintptr_t}bool是通过根据逻辑bool值设置/清除指针的低位并在需要使用指针时清除该位来实现的。定义的方式:structmyData{int*ptr;boolflag;};myDatax;//initializex

c++ - 使用指针的低位作为标志的可移植性如何?

例如,如果有一个类需要一个指针和一个bool。为简单起见,示例中将使用int指针,但指针类型无关紧要,只要它指向size()大于1的对象。使用{bool,int*}数据成员定义类将导致类的大小是指针大小的两倍,并浪费大量空间如果指针不指向一个char(或size(1)的其他数据),那么大概低位总是为零。该类可以使用{int*}或为了方便定义:union{int*,uintptr_t}bool是通过根据逻辑bool值设置/清除指针的低位并在需要使用指针时清除该位来实现的。定义的方式:structmyData{int*ptr;boolflag;};myDatax;//initializex

c++ - 可移植轻量级 C++ 套接字包装器

我真的认为这会更容易找到......我需要一个可移植的c++套接字包装器。我打算将它用于Windows服务器应用程序和将在运行ulinux(或类似的东西)的嵌入式设备上运行的客户端。我会使用Boost,但我需要它轻巧且易于添加到嵌入式设备项目中。我还希望它是一个“更高级别”的包装器......所以它启动一个后台线程来读取数据并通知回调......有什么想法吗? 最佳答案 我建议Boost.Asio.尽管有它的名字,但您不必强制使用异步I/O。正如您的问题所暗示的,您可以使用同步I/O和线程。Boost.Asioisacross-pl

c++ - 可移植轻量级 C++ 套接字包装器

我真的认为这会更容易找到......我需要一个可移植的c++套接字包装器。我打算将它用于Windows服务器应用程序和将在运行ulinux(或类似的东西)的嵌入式设备上运行的客户端。我会使用Boost,但我需要它轻巧且易于添加到嵌入式设备项目中。我还希望它是一个“更高级别”的包装器......所以它启动一个后台线程来读取数据并通知回调......有什么想法吗? 最佳答案 我建议Boost.Asio.尽管有它的名字,但您不必强制使用异步I/O。正如您的问题所暗示的,您可以使用同步I/O和线程。Boost.Asioisacross-pl

c++ - 如何在没有编译器警告的情况下进行可移植的 64 位算术

我偶尔会在我的开源C++库中使用64位算术。我发现longlong非常适合我的目的。甚至一些有10年历史的solaris盒子也可以编译它。而且它也可以在Windows上使用#defines,而不会乱七八糟。现在的问题是我收到了用户的提示,因为他们使用GCC-pedantic设置进行编译,而GCC坚持发出警告说longlong不是C++标准的一部分。这可能是对的,但我对C++标准本身并不太感兴趣,我只是希望我的代码能够在尽可能多的编译器上工作。所以我的问题是双重的:谁能说出不支持64位longlong的实际C++编译器?有没有办法让GCC编译64位算术(在32位平台上)而没有编译器警告?

c++ - 如何在没有编译器警告的情况下进行可移植的 64 位算术

我偶尔会在我的开源C++库中使用64位算术。我发现longlong非常适合我的目的。甚至一些有10年历史的solaris盒子也可以编译它。而且它也可以在Windows上使用#defines,而不会乱七八糟。现在的问题是我收到了用户的提示,因为他们使用GCC-pedantic设置进行编译,而GCC坚持发出警告说longlong不是C++标准的一部分。这可能是对的,但我对C++标准本身并不太感兴趣,我只是希望我的代码能够在尽可能多的编译器上工作。所以我的问题是双重的:谁能说出不支持64位longlong的实际C++编译器?有没有办法让GCC编译64位算术(在32位平台上)而没有编译器警告?

c++ - 这个 C++ 代码是可移植的吗? (假设多维数组有连续的内存布局)

首先,如果我犯了任何语法错误等,对不起我的英语......我的问题是,当我们有一个二维数组时,如果我是对的,从计算机和C/C++的角度来看,它只是一个长的一维数组,索引只是帮助编译器映射到具体地址。这个代码片段在VisualC++中工作,但是我想知道,这个代码是否可移植和符合到标准(C++98),不会对其他架构和/或操作系统造成意外:intarr[][3]={1,5,3,7,5,2,7,8,9};constintARR_NUM=sizeof(arr)/sizeof(int);int*ptr=reinterpret_cast(arr);//NOT:int(*)[][3]!!!for(in