我希望在运行时探测int在运行时的字节数,而不使用超过POSIX C.
基本上我的想法是寻找一种方法来检查UINT_MAX的系统限制,而不需要我的二进制文件在编译时依赖该信息。我首先考虑尝试sysconf()
,但该变量未指定为可以使用的变量。
编辑1:
澄清我正在做的是建立我自己的od
程序,基于阅读od实用程序的POSIX 1003.1-2017规范。
具体来自我在扩展描述中对这些行的阅读和解释。
由输出类型说明符d,f,o,u和x转换的默认字节数对应于各种C语言类型,如下所示。如果系统上存在c99编译器,则这些说明符应对应于该编译器中默认使用的大小。否则,这些尺寸可能因符合POSIX.1-2017的系统而异。 对于类型说明符字符d,o,u和x,默认字节数应对应于底层实现的基本整数类型
我读到这意味着默认值是基于正在运行的系统的环境而不是编译器
编辑2:
sizeof
是我在反思中寻找的东西我意识到我的原始思想对于没有libc的环境中的静态链接二进制文件没有意义。
谢谢大家。
答案 0 :(得分:3)
如果您想知道您的可执行文件使用的signinBut.addEventListener("click", e => {
firebase.auth().signInWithPopup(provider).catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
var email = error.email;
var credential = error.credential;
});
});
firebase.auth().onAuthStateChanged(function(user) {
user = result.user;
});
的大小,那么您可以使用int
,因为编译后大小不会改变(即使您在另一个处理器上运行它。)
如果你想知道你的程序在这台机器上编译时会有sizeof
的大小,那么最简单的方法就是编译并运行这样的东西:
int
(或者你可以在运行的机器上grep包含UINT_MAX的目录)
如果您想在不同架构之间移动int main() {
printf("%zu\n", sizeof(int));
}
那么这就是一个完全不同的故事。
如果没有回答,请澄清你的意图。
编辑:
int
工作得很好。
答案 1 :(得分:0)
如果您仍想在运行时获得它,可以使用以下内容 -
unsigned char myIntegerSizeOf(void) {
int a[] = { ~0, 0 } ;
unsigned char *a_ptr = (unsigned char *)&a[0] ;
unsigned char count = 0 ;
while (*a_ptr == 0xFF) {
count++ ;
a_ptr++ ;
}
return count;
}
count
包含答案。