问题标签 [variable-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为什么这个静态 const char* 初始化架构特定于?
这个问题与为什么需要静态字符 * 而不是静态字符 * 的常量初始化有关
对上述问题的回答告诉我,static const char*
初始化必须是在编译时可解析的地址。同样的答案指出,指针必须是const
,而不是(必然)指针指向的内容。这反映在下面的代码中。
那么,为什么以下代码依赖于目标架构?(即为什么这段代码会在一些但不是所有的交叉编译器上产生编译器错误?)
编译成功:
编译失败:
c - 部分定义的静态对象的未初始化成员是否保证初始化为 0?
我知道未初始化的静态变量存储在 BSS 中,因此保证用 all 初始化0
(对于它们各自的数据类型大小)。
此外,在 C 中,静态变量可以定义为编译时常量(仅)。
“部分初始化”静态变量的定义行为是什么(我不确定这是否是正确的术语),如下所示:
.
上面的“部分初始化”是指 的初始化g_table
,其中并非成员数组的所有元素都被显式定义。上面的例子意味着静态对象的未显式初始化的部分g_table
被初始化为0
. 这是保证/定义的行为吗?
注意:我知道存在关于静态变量初始化和未初始化静态变量的默认值的 Stack Overflow 问题;我无法找到有关此“部分初始化”的现有问题(如果我所描述的内容存在现有的、更正确的术语,请告诉我)。
c - 静态变量未初始化为给定值
我有一个静态“init”变量可以在启动时运行一次函数(RTOS),但它似乎初始化为一个随机值。如果我删除静态标签,一切都会很好。(除了它每次通过都运行 init 函数的明显问题。)任何人都可以更深入地了解为什么这不起作用或者可能是实现这一目标的更好方法吗?
示例代码:
编辑:对于缺乏信息,我深表歉意。这是针对一家公司的,我正努力遵守我们的公共信息政策。该MCU是使用“Ac6 STM32 MCU GCC”工具链的STM32F7系列。我不精通编译器操作,因此可能需要更长时间才能找到编译器或 makefile 相关问题的答案。
编辑:很明显,这是编译器或链接器脚本的问题,而不是我的代码。话虽如此,但在找到问题的根源之前,我还需要了解更多关于工具链、链接器脚本和编译器的知识。一旦我熟悉到足以提供有价值的反馈或自己回答这个问题,我会回到这个问题。谢谢大家的反馈和指导!
go - 在 Go 中,如何跟踪哪个导入导致变量初始化时发生的错误?
我正在尝试main()
为存储库运行该函数,但在变量初始化时遇到了棘手的恐慌:
错误归结为这行代码:
我认为问题在于,同一个库也有一个pubsub/v2/gcp.go
相同的行,因此程序试图导入两者github.com/myorg/some-library/pubsub
并github.com/myorg/some-library/pubsub/v2
在 Prometheus 指标收集器中遇到由“名称冲突”引起的恐慌。
我想做的是找到正在导入的依赖项github.com/myorg/some-library/pubsub
并将其替换pubsub/v2
为避免这种名称冲突。但是,我在弄清楚如何从这个堆栈跟踪中确定这一点时遇到了麻烦。关于如何实现这一目标的任何想法?
c# - 使用 for 循环遍历变量名
我正在尝试使用 for 循环遍历一系列变量名,每个变量名都以 1 到 10 的数字结尾。我已经看到了这个问题的其他一些答案,但无法针对我的具体情况进行任何工作。我的代码如下:
我需要遍历 10 个变量名称 cat1 - cat10。在代码中:只要有短语“cat”,我就需要能够根据 for 循环(例如 cat1 或 cat5)对其进行调整:
或者:
不幸的是,我无法简单地单独写出每个变体,因为这会占用近 3700 行代码,我希望有更好的方法来实现这一点。
非常感谢,非常感谢所有帮助,
乔什
java - 在声明变量解释之前声明静态初始化块
此代码如何正常工作并打印 9?
而且这段代码不能编译(非法前向引用)?请注意,我在静态块中更改了年龄。
另一个问题是它们两者是如何工作的?根据我以前的 Java 知识,我知道一个规则:
在声明变量之前你不能访问它们
. 那么静态块如何知道实际的变量年龄是什么?
c++ - 是变量初始化失败吗?
遵循 Bjarne Stroustrup 的《Programming Principles and Practice Using C++》一书,从基础开始学习 C++。这一切都证明是好的,直到这件事发生......
现在,正如上面的代码(在第 2 章的输入和类型部分)所暗示的,它输出一个字符串,使我们熟悉一个人的姓名和年龄。由于我已将整数变量 age初始化为-1 ,因此如果我将字符串值输入到age中,程序必须将-1返回到监视器,以防万一。问题是它不会发生在我的电脑上。我已经尝试并编译并运行了该程序 19 次(我确实记得...),但结果始终相同:它输出0 而不是 -1。
例如,如果我输入ABCXYZ 16
,那么输出将是一个漂亮而简单的Hello, ABCXYZ (age 16)。但是如果输入是16 ABCXYZ
,那么输出结果是Hello, ABCXYZ (age 0),我希望它是Hello, ABCXYZ (age -1 )因为字符串ABCXYZ
不会被读入age(它是一个整数变量) 并因此给出初始化值,因为它没有被覆盖。
任何的想法?
PS:我正在使用 Code:Blocks 和 GCC - 8.1.0
perl - Perl“我的 $bar 如果 0;” vs "我的 $bar = undef if 0;"
以下代码将返回错误,
但是这段代码
不返回错误。这两种形式有什么区别吗?
c++ - C++ -> 哪个更快?诠释一个(5);或int a = 5;
我知道这很容易,但我很困惑是否int a (5);
比int a=5;
C++ 更快,正如我在某处读到的那样,如果在类中定义了只有一个参数的构造函数,则可以用等号完成初始化。(语句可以用等号写)
所以我认为第一个可能是一个额外的工作。
c - 如果变量没有初始化,为什么这段 C 代码编译和执行要花这么长时间?
以下 C 代码需要很长时间才能编译和执行。
但是,如果我用一些数字初始化 max 变量,例如
编译和执行几乎是瞬时的。有人可以解释为什么吗?
编辑:
当我在输入之前打印变量 max 的值时,它显示 2203648(一些垃圾值)。如果我分配,而不是“int max = 0”
编译和执行需要同样长的时间。但是,如前所述,如果我指定 max say
编译和执行是即时的。它与预先分配的垃圾值有什么关系吗?
另外,这个问题只出现在windows电脑上,我用ubuntu测试过,两个版本的代码编译和执行都是瞬间完成的。
在 Windows 10 中:
编译和执行,从屏幕上出现“输入最大值:”开始:
没有变量初始化 = 大约 8 秒
变量初始化=瞬时
编译器——gcc