Tag: 可移植性

如何在C中声明一个32位整数

在任何平台上声明一个总是4字节的整数types的最好方法是什么? 我不担心某些设备或16位int旧机器。

如何在python中input一个浮点数无穷大文字

如何在python中input一个浮点数无穷大文字? 我听说 inf = float('inf') 是不可移植的。 因此,我有以下build议: inf = 1e400 这些是标准的还是便携式的? 什么是最佳做法?

Django:'current_tags'不是一个有效的标签库

我有一个朋友从我收到的小Django项目。 代码完美地在他的系统上运行。 但是,在我的系统上运行服务器时出现以下错误信息: TemplateSyntaxError at / 'current_tags'不是一个有效的标签库:找不到模板库current_tags,试过django.templatetags.current_tags 问题是在HTML文件中的一行: {% load current_tags %} 这个完全相同的代码在他的系统上工作没有错误。 那可能是什么?

现代C ++的实验性特征对于长期项目是否可靠?

我有一个目前使用C ++ 11/14的项目,但它需要像std::filesystem这样的东西,它只在C ++ 17中可用,因此我没有机会使用它。 但是,我看到它在我当前的编译器中可用作为std::experimental::filesystem 。 使用实验性function是一个好主意,假设我可以在将来添加如下内容: #ifdef CXX17 //if this is C++17 std::filesystem::something …; #else std::experimental::filesystem::something …; #endif 我的顾虑是: 1.是否保证所有兼容的编译器具有相同的实验function? 2.实验性function是否容易发生大的变化,使其变得不可靠? 也许还有更多的事情要考虑。 为什么我应该或不应该使用它们? 我对一个新项目感到困惑,不知道该怎么做。

我如何可移植地调用一些C ++函数,在某些平台上使用char **,而在其他平台上使用const char **?

在我的Linux(和OS X)机器上, iconv()函数具有这个原型: size_t iconv (iconv_t, char **inbuf… 而在FreeBSD上看起来像这样: size_t iconv (iconv_t, const char **inbuf… 我想我的C ++代码在两个平台上构build。 使用C编译器,传递char**作为const char**参数(反之亦然)通常会发出纯粹的警告; 然而在C ++中这是一个致命的错误。 所以如果我传递一个char** ,它将不会在BSD上编译,如果我传递一个const char** ,它将不能在Linux / OS X上编译。我怎样才能编写在两个编译的代码,而不诉诸试图检测平台? 我有一个(失败的)想法是提供一个本地原型来覆盖头部提供的任何东西: void myfunc(void) { size_t iconv (iconv_t, char **inbuf); iconv(foo, ptr); } 这样做是因为iconv需要C链接,并且你不能在一个函数中放置extern "C" (为什么不呢?) 我想到的最好的工作思路是投射函数指针本身: typedef void (*func_t)(iconv_t, const char **); ((func_t)(iconv))(foo, ptr); 但这有可能掩盖其他更严重的错误。

转换Little Endian到Big Endian

所有, 我一直在网上练习编码问题。 目前我正在处理一个问题声明问题 ,我们需要转换Big Endian < – >小端。 但是我不能记下考虑给出的例子的步骤: 123456789 converts to 365779719 我正在考虑的逻辑是: 1>获取整数值(因为我在Windows x86上,input是Little Endian) 2>生成相同的hex表示。 3>反转表示并生成大端的整数值 但是我显然在这里失去了一些东西。 任何人都可以请指导我。 我在Java 1.5编码

可以以便携的方式使用新的arrays吗?

在使用数组的时候是否可以在可移植代码中实际使用新的位置? 看起来你从new []得到的指针并不总是和你通过的地址一样(5.3.4,标准中的注释12似乎证实了这是正确的),但是我不明白你如果是这样的话,可以为数组分配一个缓冲区。 以下示例显示了该问题。 用Visual Studio编译,这个例子导致内存损坏: #include <new> #include <stdio.h> class A { public: A() : data(0) {} virtual ~A() {} int data; }; int main() { const int NUMELEMENTS=20; char *pBuffer = new char[NUMELEMENTS*sizeof(A)]; A *pA = new(pBuffer) A[NUMELEMENTS]; // With VC++, pA will be four bytes higher than pBuffer printf("Buffer address: %x, Array […]

我应该如何打印types如off_t和size_t?

我试图打印像off_t和size_ttypes。 什么是可移植的 printf()的正确占位符? 还是有一个完全不同的方式来打印这些variables?

什么属于一个教育工具来演示人们在C / C ++中做出的无理假设?

我想为SO编写一个小小的教育工具,帮助初学者(和中级)程序员认识并挑战他们在C,C ++及其平台上的无理假设。 例子: “整数环绕” “每个人都有ASCII” “我可以将函数指针存储在void *中 我认为可以在各种平台上运行一个小型的testing程序,这个程序运行“合理”的假设,即从我们的经验来看,通常是由许多缺乏经验/半经验的主stream开发人员制作的,并logging他们在不同机器上打破的方式。 这样做的目的并不是要certificate做某件事是“安全的”(这是不可能的事,testing只有在事件发生的时候才能certificate),而是要向最不能理解的人展示最不显眼的expression如果它有未定义的或实现定义的行为,则在不同的机器上中断。 。 为了达到这个目的,我想问你: 这个想法如何改进? 哪些testing是好的,他们应该是什么样子? 你会在可以接触到的平台上运行testing并发布结果,以便我们得到平台数据库,它们有何不同以及为什么允许这种差异? 以下是testing玩具的当前版本: #include <stdio.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> int count=0; int total=0; void expect(const char *info, const char *expr) { printf("..%s\n but '%s' is false.\n",info,expr); fflush(stdout); count++; } #define EXPECT(INFO,EXPR) if (total++,!(EXPR)) expect(INFO,#EXPR) /* stack check..How can I do this […]

是否有替代unistd.h的Windows(Visual C)?

我将一个为Unix编写的相对简单的控制台程序移植到Windows平台( Visual C ++ 8.0 )。 所有源文件都包含“unistd.h”,它不存在。 除去它,我得到了有关“srandom”,“random”和“getopt”的错误原型的投诉。 我知道我可以replace随机函数,我很确定我可以find/ hack-up getopt实现。 但我相信其他人也遇到了同样的挑战。 我的问题是:是否有一个“unistd.h”的Windows端口? 至less有一个包含那些具有本地Windows实现的函数 – 我不需要pipe道或分支。 编辑 : 我知道我可以创build我自己的“unistd.h”,它包含了我需要的东西的替代品 – 特别是在这种情况下,因为它是一个有限的集合。 但是,由于这似乎是一个普遍的问题,我想知道是否有人已经完成了这项function的更大的子集的工作。 切换到不同的编译器或环境是不可能的 – 我坚持使用Visual Studio。