相关疑难解决方法(0)

"static const"vs"#define"vs"enum"

在C中的以下陈述中哪一个更好用?

static const int var = 5;
Run Code Online (Sandbox Code Playgroud)

要么

#define var 5
Run Code Online (Sandbox Code Playgroud)

要么

enum { var = 5 };
Run Code Online (Sandbox Code Playgroud)

c constants

550
推荐指数
12
解决办法
33万
查看次数

static const vs #define

使用static constvars比#define预处理器更好吗?或者也许取决于背景?

每种方法的优点/缺点是什么?

c c++ const

200
推荐指数
6
解决办法
14万
查看次数

尝试使用const初始化变量时,错误"初始化元素不是常量"

我在以下程序的第6行(初始化my_foo到foo_init)时收到错误,我不确定我理解为什么.

typedef struct foo_t {
    int a, b, c;
} foo_t;

const foo_t foo_init = { 1, 2, 3 };
foo_t my_foo = foo_init;

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请记住,这是我正在研究的大型多文件项目的简化版本.目标是在目标文件中有一个常量,多个文件可用于初始化状态结构.由于它是一个资源有限的嵌入式目标,并且结构不是那么小,我不想要源的多个副本.我不想使用:

#define foo_init { 1, 2, 3 }
Run Code Online (Sandbox Code Playgroud)

我也在尝试编写可移植代码,所以我需要一个有效的C89或C99解决方案.

这是否与目标文件中的ORG有关?初始化变量进入一个ORG并通过复制第二个ORG的内容进行初始化?

也许我只需要改变我的策略,并在启动时使用初始化功能完成所有副本.除非有其他想法吗?

c initialization

175
推荐指数
4
解决办法
22万
查看次数

在文件范围内可变修改的数组

我想创建一个在我的Objective-C实现文件中使用的常量静态数组,类似于我的".m"文件的顶层.

static const int NUM_TYPES = 4;
static int types[NUM_TYPES] = { 
  1,
  2, 
  3, 
  4 };
Run Code Online (Sandbox Code Playgroud)

我打算NUM_TYPES稍后在文件中使用,所以我想把它放在一个变量中.

但是,当我这样做时,我得到了错误

"在文件范围内修改了'类型'"

我认为这可能与数组大小是变量有关(当我在那里放一个整数文字时,我不会收到此消息static int types[4]).

我想解决这个问题,但也许我说这一切都错了......我在这里有两个目标:

  1. 拥有一个可在整个文件中访问的数组
  2. 要封装NUM_TYPES到变量中,所以我的文件中的不同位置没有相同的文字

有什么建议?

[编辑]在C Faq中找到了这个:http://c-faq.com/ansi/constasconst.html

c arrays static const objective-c

81
推荐指数
5
解决办法
11万
查看次数

可以使用const变量来声明C中数组的大小吗?

为什么以下代码会抛出错误?

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

而且当我尝试编译没有"const"关键字的上述代码时,我得到了同样的错误:

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

为什么会这样?我在这里做的错误是什么?

还有另一个问题:什么时候常量被代码中的实际值替换,即如果我声明一个变量说:const int x = 5; 我知道在RAM中没有为变量x分配内存,但是ROM中的常量变量区域保持值5,并且x在代码中出现x的地方简单地替换为值5.但这什么时候发生的?编译时间?启动时间?预处理时间?

PS:我说的是嵌入式C(在微控制器上运行等),而不是在桌面上运行的C. 因此嵌入式系统必然会有一个ROM(Flash,EEPROM ......).那会发生什么?

c arrays const

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

"初始化器元素不是常量"错误在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中,为什么const变量不能用作数组大小初始值设定项?

在以下代码中,const int不能用作数组大小:

const int sz = 0;
typedef struct
{
   char s[sz];
} st;

int main()
{
   st obj;
   strcpy(obj.s, "hello world");
   printf("%s", obj.s);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

12
推荐指数
3
解决办法
4903
查看次数

使用const int定义数组的大小

当我尝试运行它时,它给出了一个错误,说变量中的值a不是常量.这对我没有意义,因为我明确地使变量a保持不变.数组的大小是否必须更加恒定?只是意义,#define a 5或者将其初始化为int arr[5]或使用malloc?我做了什么错了?

int main{

   const int a = 5;
   int i;
   int arr [a];

   for (i = 0; i < 5; i++) {
      arr[i] = i * 2;
   }

  printf("%d", arr[1]);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays size const

11
推荐指数
1
解决办法
3749
查看次数

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

我使用以下代码.

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万
查看次数

在文件范围内可变修改的数组

以下代码有什么问题?

#define DELAY_CYCLES ((int)(0.1/0.001))
typedef struct {
    double state_history[N_X][DELAY_CYCLES];
    double foo;
} foo

gcc抱怨:

main.h:52:3:警告:在文件范围内修改了'state_history'

是因为int cast由于某种原因无法在编译时完成吗?

c

7
推荐指数
2
解决办法
7393
查看次数

标签 统计

c ×10

const ×5

arrays ×3

c++ ×1

constants ×1

gcc ×1

initialization ×1

initializer ×1

linux ×1

macos ×1

objective-c ×1

size ×1

static ×1