c语言 安装初始化错误,错误:初始化元素不是常量(c语言)(Error: Initializer Element is not constant (c language))...

错误:初始化元素不是常量(c语言)(Error: Initializer Element is not constant (c language))

这是一个存储公式的.h文件,但是它给出了你在第16行(字符串下面)上看到的错误。 我是一个初学者,错误说不是常数所以我虽然把“const”放在“浮动”之前,但它无论如何都不起作用。

#ifndef FORMULAS_H_INCLUDED

#define FORMULAS_H_INCLUDED

float a;

float Pi=3.1415926536;

float r;

float b;

float c;

float h;

char formula_volume_cube[100] = "Formula for the Volume of a Cube: V=a*a*a";

const float volume_cube=(a*a*a);

#endif // FORMULAS_H_INCLUDED

任何帮助将不胜感激。 感谢您的时间。

This is a .h file to store formulas but it gives me the ERROR you see at the tittle on line #16(below the string). I'm a beginner and the error says is not constant so I though of putting "const" before the "float" but it doesn't work either way.

#ifndef FORMULAS_H_INCLUDED

#define FORMULAS_H_INCLUDED

float a;

float Pi=3.1415926536;

float r;

float b;

float c;

float h;

char formula_volume_cube[100] = "Formula for the Volume of a Cube: V=a*a*a";

const float volume_cube=(a*a*a);

#endif // FORMULAS_H_INCLUDED

Any help will be appreciated. THANK you for YOUR time.

原文:https://stackoverflow.com/questions/30494894

2020-09-06 15:09

满意答案

C中的全局变量只能用编译时常量表达式初始化,这是一个非常狭窄的表达式类。 它基本上只包含涉及文字的文字或表达:

float a1 = 1.5; // OK

const float a2 = 2.5 * 10 / 300; // Also OK

标识另一个全局变量的表达式不是编译时常量表达式:

// float a3 = a2; // Error!

C对此没有足够的表现力。 这一切都是为了简单起见。 例如,C不区分const float b1 = 2.5; 和extern const float b2; 。 变量b1不比b2 “更常”,但只有b1的值是编译器已知的,而b2的值是未知的 - 它可以仅由不同的转换单元设置,并且没有任何排序。 所以没有办法使一个常数“比另一个更恒定”。 C中的简单解决方案是没有 id-expression可以用作编译时常量。

(相比之下,C ++允许全局变量具有动态初始化器。如果一个全局变量的初始化器依赖于另一个全局变量,则会引入一整套排序问题.C没有​​这些问题。)

Global variables in C can only be initialized with compile-time constant expressions, and that is a very narrow class of expressions. It essentially only comprises literals or expressions involving literals:

float a1 = 1.5; // OK

const float a2 = 2.5 * 10 / 300; // Also OK

An expression that identifies another global variable is not a compile-time constant expression:

// float a3 = a2; // Error!

C is just not expressive enough for this. This is all for the sake of simplicity. For example, C does not distinguish between const float b1 = 2.5; and extern const float b2;. The variable b1 is no "more const" than b2, but only b1's value is known to the compiler, whereas b2's value is not known — it may be set only by a different translation unit, and without any ordering. So there's no way to make one constant "more constant" than the other. The simple solution in C is that no id-expression can be used as a compile-time constant.

(C++, by contrast, allows global variables to have dynamic initializers. This introduces a whole set of ordering concerns if one global variable's initializer depends on another global variable. C has none of those problems.)

2015-05-27

相关问答

试试这个: enum { key0_buffer = 9 };

初始化全局变量时,C不提供运行时计算。 (这个概念确实存在,称为“动态初始化”的C ++特性。) 执行模型是它可以将全局变量的所有字节存储在ROM中,然后将任何可修改的变量与单个memcpy一起复制到RAM中。 将一个全局分配给另一个全局会更复杂。 #define允许您替换文本9 ,这是一个常量表达式。 许多人不赞成使用文本替换来避免变量原始,不必要的低级别,并且可能效率低下。 但在这种情况下,结果应该是相同的。 在C中, enum...

在具有静态存储持续时间的C语言对象中,必须使用常量表达式或包含常量表达式的聚合初始化器初始化对象 “大”对象在C中永远不是常量表达式,即使对象被声明为const 。 此外,在C语言中,术语“常量”是指文字常量 (如1 , 'a' , 0xFF等等)和枚举成员。 Const定义的对象(任何类型的) 不是 C语言术语中的常量 。 它们不能在具有静态存储持续时间的对象的初始化器中使用,而不管其类型如何。 例如,这不是常数 const int N = 5; /* `N` is not a constant...

您应该只在方法内初始化变量 尝试覆盖 -(id) init

{

self = [super init];

if(self)

{

myArray = [[NSMutableArray alloc] init];

}

return self;

}

You should init the variable only inside a method try override -(id) init

{

self = [super init];

if(self)...

从C11 6.7.9 / 4(C99有类似的文字): 具有静态或线程存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字。 从C11 6.6“常量表达式”: 初始化器中的常量表达式允许更大的纬度。 这样的常量表达式应为或评估为以下之一: 算术常量表达式, 空指针常量, 地址常数,或 完整对象类型的地址常量加上或减去整数常量表达式。 复合文字不是那些项目符号,因此初始化程序中不允许使用它。 如果复合文字的初始值设定符都是符合这些条件的常量表达式,我看不出为什么不允许它的任何理由。...

该标准第6.6条第3款规定 常量表达式不应包含赋值,递增,递减,函数调用或逗号运算符,除非它们包含在未评估的子表达式中。 常量表达式不得包含已计算的函数调用。 那是因为 可以在转换期间而不是运行时期间评估常量表达式,并且因此可以在常量可以在任何地方使用。 (第2段同上),在翻译期间可能无法评估函数调用。 在常量表达式中 - 这样需要初始化静态存储持续时间的对象 - 您只能使用基本算术, +-*/和sizeof (但仅当结果是整数常量表达式时)和_Alignof : 算术常量表达式应具有算术类型,并...

您无法从函数的返回值初始化具有static存储的变量: static inline GraphicsInfo *CA_getGraphicsInfo() {

static GraphicsInfo result = getGraphicsInfo(); // Error Occurs Here

return &result;

}

这两个代码片段处理的是你没有提供定义的不同结构,也不应该编译,但请注意,如果没有定义WINDOWS , getPath操作一个未初始化的结构result...

C中全局变量的初始值必须是常量表达式,而b不是常量表达式。 (它甚至不是一个const变量)。相反,表达式a是全局数组a的第一个元素的地址,全局变量的地址是常量表达式。 要在更高层次上回答您的问题: a和b之间的区别在于您使用的是b的值 ,但不是b的值,而只是其地址 。 Initializers of global variables in C need to be constant expressions, and b is not a constant expression. (It's no...

你只能在声明中用一个常量初始化全局变量,而newGQueue不是。 这是因为在程序开始执行之前,所有的全局变量都必须被初始化。 编译器在其声明中使用分配给全局变量的任何常量值,并在程序运行时通过OS加载程序将其直接加载到内存中的程序数据段中使用该值。 只需将声明中的kbdQueue初始化为NULL,并将其初始化为main或其他启动函数中的值即可。 volatile GQueue * kbdQueue = NULL;

int main() {

kbdQueue = newGQueue(10...

请改用宏。 #define EBD_HEADER_SIZE sizeof(EBD_HEAD)

#define EBD_TRAILER_SIZE sizeof(EBD_TRAIL)

#define RMH_ENCODED_MSG_OVERHEAD (EBD_HEADER_SIZE + EBD_TRAILER_SIZE)

感到可怕吗? 阅读本文并记住这是C(Objective-C基于)而不是C ++ Use macros instead. #define EBD_HEADER_SIZE sizeof...

C中的全局变量只能用编译时常量表达式初始化,这是一个非常狭窄的表达式类。 它基本上只包含涉及文字的文字或表达: float a1 = 1.5; // OK

const float a2 = 2.5 * 10 / 300; // Also OK

标识另一个全局变量的表达式不是编译时常量表达式: // float a3 = a2; // Error!

C对此没有足够的表现力。 这一切都是为了简单起见。 例如,C不区分const ...

相关文章

在编写后台登陆模块时,将许多默认的设置放在一个名为default的package 里。然后再定义其他

...

中文名: C++程序设计语言 特别版 十周年纪念版 原名: The C++ Programmin

...

本人使用Swing开发图形界面,最近了解到XUL技术,知道可以通过编辑XML文档来定义各种Swing组

...

今天尝试用C语言在Hadoop上编写统计单词的程序,具体过程如下: 一、编写map和reduce程序

...

30分 #include "stdio.h"#define u32 unsign

...

中文名: 我的第①本c语言编程书:C语言从入门到精通 作者: 国家863中部软件孵化器 图

...

没有此资源的相关简介

中文名: C/C++图像处理编程 作者: 陆宗骐 图书分类: 网络 资源格式: PD

...

JSTL详解之c:forEach,status.current 当前这次迭代的(集合中的)项 stat

...

现在计划做通过C访问Hadoop,选择了LibHDFS,打算用Eclipse(V3.7.2) CDT和

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值