gpt4 book ai didi

c - Ada 到 C : Value of argument changes on imported function across languages

转载 作者:行者123 更新时间:2023-11-30 16:29:55 25 4
gpt4 key购买 nike

我有以下 Ada 函数

function Get_GPS_Epoch(Time : Standard_Types.Integer_Type)
return Global_Types.Long_GPS_Time_Type;
pragma import(C, get_GPS_Epoch, "getGpsEpoch");

C端

unsigned long long
getGpsEpoch(time_t startTime)
{
time_t gpsEpoch;

// Get current time
time_t curTime;
if (startTime == -1)
curTime = time(NULL);
else
curTime = startTime;

// Get gmtime broken down into parts
struct tm utcTime
if (curTime >=0 && gmtime_r(&curTime, &utcTime))
{
// Calculate the number of seconds from the Linux epoch
// to the GPS epoch which is midnight Jan 1st of the current year
gpsEpoch = curtime - (utcTime.tm_yday * 86400 +
utcTime.tm_hour * 3600 +
utcTime.tm_min * 60 +
utcTime.tm_sec);
}
// Convert to micro seconds
return (unsigned long long)gpsEpoch * 1000000;
}

我的问题是关于 Ada,我称之为以下内容

Get_GPS_Epoch(-1);

然后当它进入 C 函数(使用调试器)时,-1 变为 4294967295

(当调试器打印二进制文件时,两者都是 1111 1111 1111 1111,这让我认为它们使用了不同的字长(QWORDDWORD),但我对此类问题没有经验。

这让我认为 time_t 是一个 unsigned int 但我不确定如果是的话它是否会这样做。它会直接破裂吗?或者我只是被 Ada 范围检查异常宠坏了?

在之前的基线中,这是有效的。他们也使用不同的 RHEL 版本。

最佳答案

假设您使用的是 GCC,您可以使用 gcc -fdump-ada-spec 生成与 C 函数的 Ada 绑定(bind)。这应该生成一个保证可以工作的绑定(bind)(使用用于编译 C 和 Ada 的 GCC 版本)。

关于c - Ada 到 C : Value of argument changes on imported function across languages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com