- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
用下面的代码
#include <unistd.h>
int a = getpagesize();
int main() {
return a;
}
我收到以下编译错误
3:1: error: initializer element is not constant
什么是“初始化元素”,为什么它需要保持不变?这与 const
限定符有关吗?
最佳答案
用于初始化全局变量的值需要在编译时确定。函数的返回值(至少在 C 中)直到运行时才会被评估。所以像这样:
int a = 4;
没问题,但是:
int a = somefunction();
不是。在 C++ 中,您可以拥有 constexpr
函数,但在 C 中您不能。
如果你必须做这样的事情,你总是可以使用:
int a;
int main(void) {
a = getpagesize();
/* Rest of your program */
}
显然你不能让你的全局 const
这样做(因为你只能在初始化时设置 const
变量的值,而你不能初始化全局变量有功能)。坦率地说,您可能没有理由不能在需要时调用 getpagesize()
而完全忘记全局变量 - 除非您调用它十亿次,否则您不会注意到开销.如果您必须有一个全局变量,那么就不要将其设为 const
。
如果不变性是绝对要求,并且问题是避免昂贵的函数调用而不是完全避免函数调用,那么一个选择是用廉价的函数调用替换它,如下所示:
int poor_mans_global(void) {
static int a = -1;
if ( a == -1 ) {
a = getpagesize(); /* Only call the expensive function once */
}
return a;
}
并调用 poor_mans_global()
而不是使用您的全局变量。请注意,此示例只是说明性的,并不意味着 getpagesize()
是一个昂贵的函数调用。
最后一个选择是将所有需要访问这个全局的代码打包到一个单独的翻译单元中,并使全局 static
,即文件范围而不是真正的全局。 const
的好处 - 在 C 语言中从来都不是的好处 - 当您可以严格控制哪些代码可以访问该变量时,这些好处会急剧减少。
关于无法使用 `getpagesize()` 调用在 C 中设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984935/
在 getpagesize() 手册页中,写到“函数 getpagesize() 返回内存页中的字节数,其中“页”是固定长度的 block ,内存分配的单位”。 这是否意味着如果我们 malloc(1
我有一个文件 hello.txt和一个指向文件的指针 *i,我已经使用 c open(*i) 函数打开了该文件。我想使用 getpagesize(2) 获取文件的大小来读取文件的内容并将该内容进一步写
用下面的代码 #include int a = getpagesize(); int main() { return a; } 我收到以下编译错误 3:1: error: initializ
/* * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86. * On Windows NT it de
为什么系统调用 getpagesize() 返回 int 而不是 unsigned int 或 size_t? 原型(prototype)和简短描述如下: GETPAGESIZE(2)
在一般情况下和跨平台支持方面,一个函数——getpagesize() 与 sysconf(_SC_PAGESIZE)——是否比另一个更可靠? 最佳答案 经过一些额外的搜索,我发现 getpagesiz
我目前正在将软件项目的一些操作系统相关功能从 Linux 移植到 FreeBSD。因此,如果在 FreeBSD 10.1 上定义了 _POSIX_C_SOURCE=200809L,我使用 getpag
我正在尝试使用 Tensorflow Object Detection API,我按照给定链接中提到的步骤操作 - https://tensorflow-object-detection-api-tu
我正在使用 brk、sbrk 和 getpagesize() 重新编码 malloc 函数 我必须遵循两条规则: 1)我必须将我的内存对齐到 2 的幂 这意味着:如果对 malloc 的调用是:mal
我是一名优秀的程序员,十分优秀!