相关疑难解决方法(0)

如何在C++中的main()内部声明什么,并在编译后有一个工作的应用程序?

在一次采访中,我遇到了一个问题:

您的朋友给了您一个源代码文件,该文件在控制台上打印斐波那契数字.请注意,main()块为空,并且其中没有任何语句.

解释这是如何可能的(提示:全局实例!)

我真的想知道这个,这样的事情怎么可能!

c++

85
推荐指数
3
解决办法
3715
查看次数

C中文件范围的可变修改数组

我有一些像这样的代码:

static int a = 6;
static int b = 3;

static int Hello[a][b] =
{
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3}
};
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时,它说错误:

在文件范围内可变地修改了"Hello"

怎么会发生这种情况?我该怎么办呢?

c arrays static

30
推荐指数
2
解决办法
6万
查看次数

初始化元素在C中不是常量

可能重复:
尝试使用const初始化变量时出错"初始化元素不是常量"

我来自javascript/php/python,可能我错过了什么,这里是代码:

const int a = 50;
const int c = 100;
const int d = 100;
int endX = c + a;
int endY = d;
int startX, startY, b;
Run Code Online (Sandbox Code Playgroud)

我明白了

ex1.4.c:6:错误:初始化元素不是常量
ex1.4.c:7:错误:初始化元素不是常量

有人有解释吗?

c

16
推荐指数
3
解决办法
6万
查看次数

"初始化器元素不是常量"错误在Linux GCC中没有任何理由,编译C

我把我的main.c文件用Mac OS X中的gcc -std = c1x -c main.c编译,它没有错误,工作正常.然后我在LinuxMint和Raspberry Pi上执行完全相同的操作,在这两种情况下,它都给出了"初始化元素不是常量"的错误.

带有相关代码的问题行的一个示例:

//STATIC GLOBAL CONSTANTS
const unsigned long long LATITUDE = (long) 3600000;
const unsigned long long LONGITUDE = (long) 1810000;
const unsigned long long MAX_COORDINATES_NUMBER = (LATITUDE-1) + LATITUDE*(LONGITUDE-1); //compiler error: initializer element is not constant
Run Code Online (Sandbox Code Playgroud)

它应该让我做算术,对吗?我可以用实际数字替换它,它会起作用,但随后会变得混乱.无论如何,它在我的Mac上运行良好.在GCC中是否有一些选项我必须在Linux上指定(除了-std = c1x,你在Mac上也不需要)?

c linux macos gcc

13
推荐指数
1
解决办法
2万
查看次数

为什么这个常数表达式不是常数

我有以下C清单:

static const int constant = (0 | ((((1 << 6) - 1) << ((((0 + 8) + 8) + 3) + 7)) & ((1) << ((((0 + 8) + 8) + 3) + 7))) | ((((1 << 7) - 1) << (((0 + 8) + 8) + 3)) & ((0) << (((0 + 8) + 8) + 3))) | ((((1 << 3) - 1) << ((0 + 8) + 8)) & ((0) << ((0 + 8) + 8))) | …
Run Code Online (Sandbox Code Playgroud)

c gcc

13
推荐指数
1
解决办法
255
查看次数

编译错误C2099:初始化程序不是常量

以下代码不会编译:

const int a = 0;

struct Test
{
    int b;
};

static const struct Test test = 
{
    a
};
Run Code Online (Sandbox Code Playgroud)

它是我真正想要做的一个减少的例子,但我做错了什么?

c compiler-construction visual-studio-2010

10
推荐指数
2
解决办法
2万
查看次数

使用其他Const Struct实例初始化Const Struct

我很好奇为什么下面的代码片段无法编译:

typedef struct Foo {
    int a;
    int b;
} Foo;

static const Foo FooZero = { 0, 0 };

typedef struct Bar {
    Foo foo;
    int c;
} Bar;

static const Bar BarZero = { FooZero, 0 };
Run Code Online (Sandbox Code Playgroud)

它抱怨使用FooZero,说明FooZero不是Compile-Time Constant

但不是吗?我在这里不理解什么?

显然,我可以简单地替换FooZero初始化程序中的用法{ 0, 0 }- 我的目的是提出问题不是如何解决问题 - 我试图理解其根本原因FooZero不是,实际上是编译时常量.

谢谢

c struct initialization

10
推荐指数
1
解决办法
2万
查看次数

为什么我得到一个关于初始化器不是常量的错误?

我使用以下代码.

const int X_ORIGIN = 1233086;             
const int Y_ORIGIN = -4728071;              
const int Z_ORIGIN = 4085704;
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Run Code Online (Sandbox Code Playgroud)

当我编译它时,GCC给我以下错误.

Transformations.h:16:1:错误:初始化元素不是常量

那是什么意思?我该如何修复我的代码?

c const initializer

10
推荐指数
3
解决办法
4万
查看次数

使用函数调用初始化静态变量会产生编译错误?

#include <stdio.h>
int foo(){
    return 1;
}
int main(void) {
    static int q = foo(); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是相同的链接.这是一个C代码而不是C++.它编译并在C++中运行良好,但不是C.

此代码出现编译错误.有人可以解释为什么会出错?静态成员只能用常量值初始化吗?在C++中,我们需要在声明静态成员后对其进行DEFINE,为什么在C中不需要它?我找不到任何具有类似查询或良好答案的线程.

c static

8
推荐指数
2
解决办法
5833
查看次数

为什么编译器限制全局变量始终用常量值初始化?

让我举例说明一下,

int a = 100;
int b = a;

int main(int argc, char **argv, char ** env)
{
  printf("The value of b=%d\r\n",b);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,我按预期得到了编译错误.

[joshis1@localhost global_var]$ gcc global_var.c -o global_var.out
global_var.c:4:1: error: initializer element is not constant
 int b = a;
 ^
Run Code Online (Sandbox Code Playgroud)

我想在这里学到的是为什么我会得到错误?为什么编译器限制此操作.我知道初始化的全局变量存储在数据段中.编译器可以首先解析a的值,然后可以为b分配相同的值.为什么它缺少这个功能?编译器复杂吗?这个功能背后是否有任何理由或只是C的陷阱?

c

8
推荐指数
2
解决办法
404
查看次数