第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么我不能從 Golang 正確讀取 C 常量?

為什么我不能從 Golang 正確讀取 C 常量?

Go
富國滬深 2021-09-13 16:15:28
我正在使用 go-hdf5 將 hdf5 文件讀入 golang。我在 windows7 上使用了一個(gè)相當(dāng)新的 mingw 和 hdf5 1.8.14_x86 副本,似乎嘗試使用任何預(yù)定義類型都不起作用,讓我們關(guān)注 T_NATIVE_UINT64。我已將問題簡化為以下問題,這基本上將 go-hdf5 排除在問題之外,并指出了一些非常根本的問題:package main/* #cgo CFLAGS: -IC:/HDF_Group/HDF5/1.8.14_x86/include #cgo LDFLAGS: -LC:/HDF_Group/HDF5/1.8.14_x86/bin -lhdf5 -lhdf5_hl #include "hdf5.h" #include <stdio.h> void print_the_value2() { printf("the value of the constant is %d\n", H5T_NATIVE_UINT64); }*/import "C"func main() {    C.print_the_value2()}您顯然需要有 hdf5 并將編譯器指向頭文件/dll 并運(yùn)行 go get,然后在我的電腦上執(zhí)行打印the value of the constant is -1962924545在讀取常量的方式/位置方面運(yùn)行上述變體,將對 H5T_NATIVE_UINT64 的值給出不同的答案。但是,我很確定沒有一個(gè)是正確的值,事實(shí)上,嘗試使用返回 id 的類型是行不通的,這并不奇怪。如果我編寫并運(yùn)行一個(gè)“真正的”C 程序,我會(huì)得到不同的結(jié)果#include <stdio.h>#include "hdf5.h"hid_t _go_hdf5_H5T_NATIVE_UINT64() { return H5T_NATIVE_UINT64; }int main(){    printf("the value of the constant is %d", _go_hdf5_H5T_NATIVE_UINT64());}編譯使用C:\Temp>gcc -IC:/HDF_Group/HDF5/1.8.14_x86/include -LC:/HDF_Group/HDF5/1.8.14_x86/bin -lhdf5 -lhdf5_hl -o stuff.exe stuff.c跑步給了我the value of the constant is 50331683這似乎是正確的值,因?yàn)槲铱梢灾苯訌奈业?go 程序中使用它。顯然我希望能夠使用常量。知道為什么會(huì)發(fā)生這種情況嗎?以下評論中的額外信息:我在 hdf5 標(biāo)頭中查找了 H5T_NATIVE_UINT64 的定義,并看到以下內(nèi)容c:\HDF_Group\HDF5\1.8.14_x86\include>grep H5T_NATIVE_UINT64 *H5Tpkg.h:H5_DLLVAR size_t H5T_NATIVE_UINT64_ALIGN_g; H5Tpublic.h:#define H5T_NATIVE_UINT64 (H5OPEN H5T_NATIVE_UINT64_g)H5Tpublic.h:H5_DLLVAR hid_t H5T_NATIVE_UINT64_g;整個(gè)標(biāo)題在這里http://www.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8.14/src/unpacked/src/H5Tpublic.h謝謝!
查看完整描述

1 回答

?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

H5T_NATIVE_UINT64 不是一個(gè)常量,而是一個(gè)最終計(jì)算為 的#define (H5Open(), H5T_NATIVE_UINT64_g),cgo 不理解。

通過在 gcc 的預(yù)處理器上打開調(diào)試輸出很容易檢查:

gcc -E -dM your_test_c_file.c | grep H5T_NATIVE_UINT64

結(jié)果:

#define H5T_NATIVE_UINT64 (H5OPEN H5T_NATIVE_UINT64_g)

現(xiàn)在 H5OPEN 也一樣:

gcc -E -dM test_go.c | grep '#define H5OPEN'

給出:

#define H5OPEN H5open(),

現(xiàn)在,cgo 確實(shí)理解簡單的整數(shù)常量定義,例如#define VALUE  1234,或 gcc 預(yù)處理器將轉(zhuǎn)換為整數(shù)常量的任何內(nèi)容。見函數(shù)func (p *Package) guessKinds(f *File)$GOROOT/src/cmd/cgo/gcc.go。


查看完整回答
反對 回復(fù) 2021-09-13
  • 1 回答
  • 0 關(guān)注
  • 188 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)