小编Rob*_*edy的帖子

如何使用Free Pascal编译64位Mac程序?

我在我的Mac上有一个由GCC编译的x86_64库,我想将它与使用Free Pascal 2.4编译的Pascal代码链接.我可以使用哪些选项fpc来生成64位代码?没有任何选项,我只获得32位.o文件.

我正在使用来自SourceForge 的fpc-2.4.0.intel-macosx.dmg下载,但是当我运行时fpc -i,它列出的唯一目标Macintosh平台是"Darwin for i386",尽管2.4版本说明它可以定位"64 -bit Mac OS X(x86_64/ppc64)."

macos 64-bit freepascal

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

我可以在不丢失以前内容的情况下调整Delphi数组的大小吗?

我有一个动态数组.但最初我不知道阵列的长度.我可以先做,我将它的长度设置为1,然后根据需要增加长度而不丢失以前存储的数据吗?
我知道我可以使用TList做这样的任务.但我想知道我是否可以用数组做到这一点?

delphi dynamic-arrays

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

所有C++编译器都生成C代码吗?

可能是一个非常模糊和广泛的问题,但是所有C++编译器在将代码编译成机器代码之前是否先将代码编译成C?

c c++ compiler-construction

8
推荐指数
3
解决办法
3605
查看次数

Boost.Python是如何工作的?

当解释器是C并且使用C编译器构建时,Python如何能够调用C++对象?

c++ python boost-python

8
推荐指数
3
解决办法
1223
查看次数

Pascal评论是否应该嵌套?

我有一个编译器作业问题,希望我为Pascal评论绘制DFA,但我从来没有(也可能永远不会)使用Pascal.问题没有说明我们是否应该使用ANSI Pascal或Turbo Pascal,所以我打算为两者做一个.

一些谷歌搜索向我展示了Turbo Pascal允许嵌套注释,只要没有使用相同的分隔符{(*comment*)},所以可以(*{comment}*),但是,{{comment}}或者(*(*comment*)*)不好.我的问题是,如果评论喜欢{(*{comment}*)}或者(*{(*comment*)}*)没有问题,因为相同的分隔符不会连续使用.

我也用谷歌搜索ANSI Pascal是否允许嵌套注释,但我还没有找到明确的答案.如果ANSI Pascal允许嵌套注释,那么规则是什么?

另外,我并不担心不同的起始和结束分隔符的奇怪的注释约定,这是ANSI Pascal中允许的约定.

更新:

我想明确的是我并不关心特定编译器如何处理Pascal注释,我关心编译器应该如何处理Pascal注释,如果该编译器100%遵守ANSI或TURBO Pascal标准.

pascal comments

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

如何在复合类型上使用Boost.Bind?

我有std::map<int, std::pair<short, float> >,我需要short在这张地图中找到最小值.我该怎么boost::bindstd::min_element()

boost::lambda

c++ boost-bind boost-lambda

8
推荐指数
2
解决办法
992
查看次数

如何在控制台程序中获得鼠标位置?

如何在Windows控制台程序中获取C++中的鼠标单击位置?(单击时返回鼠标位置的变量)

我想用简单的文本命令绘制菜单,所以当有人点击时,游戏会注册它并知道位置.我知道如何做我需要做的一切,除非在点击时获得鼠标位置.

c++ mouse windows-console

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

在有条件地包含stdafx.h之后,为什么会出现编译错误?

我正在尝试编写一个用Borland C++和Visual C++编写的程序.为此,我在VS下编译源时添加#ifdef _MSC_VER包含stdafx.h文件.代码在Borland C++中编译并执行OK,但在VS中,它失败了:

错误C1020:意外#endif

#ifdef _MSC_VER //I'm in VS
#include "stdafx.h"
#endif //this line doesn't compile in VS


#ifdef __BORLANDC__   //I'm in Borland
#pragma hdrstop
#pragma argsused
#endif

#include <iostream>

int main(int argc, char* argv[])
{
    std::cout << "Hello" << std::endl;
    std::cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

c++ compiler-errors c++builder conditional-compilation visual-studio

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

如何通过不断增长的TDictionary避免内存不足?

TDictionary<TKey,TValue> 使用内部数组,如果它已满,则加倍:

newCap := Length(FItems) * 2;
if newCap = 0 then
  newCap := 4;
Rehash(newCap);
Run Code Online (Sandbox Code Playgroud)

这适用于中等数量的项目,但如果达到上限,则非常不幸,因为EOutOfMemory即使几乎有一半的内存仍然可用,它也可能抛出异常.

有没有办法影响这种行为?其他集合类如何处理这种情况?

delphi collections memory-management delphi-xe

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

可以从引发异常的点恢复执行吗?

有一个例子说明了我的问题:

procedure Test;
begin
  try
    ShowMessage('1');
    raise EWarning.Create(12345, 'Warning: something is happens!');
    ShowMessage('2');
  except
    on E: EWarning do
      if IWantToContinue(E.ErrorCode) then
        E.SkipThisWarning // shows '1' then '2'
      else
        E.StopExecution;  // shows '1'
  end;
end;

function IWantToContinue(const ErrorCode: Integer): Boolean;
begin
  //...
end;
Run Code Online (Sandbox Code Playgroud)

我试着用这样的东西:

asm
  jmp ExceptAddr
end;
Run Code Online (Sandbox Code Playgroud)

但它不会工作......

有任何想法吗?

谢谢.

delphi exception-handling exception

8
推荐指数
2
解决办法
3527
查看次数