0

我正在尝试为在 AM335x 处理器上运行的应用程序设置多语言 GUI;在 CCS 6.0.1 中开发并使用 TI 编译器 5.1.8。这个概念是获取枚举字典数组,然后将当前字典指针切换到其中之一,以便我能够使用有意义的枚举。

enum dictionary_indexes {
name,
surname,
phone
}

const char *dictionary_en[60];

dictionary_en[name] = "Your name";
dictionary_en[surname] = "Your surname";
//and so on

不幸的是,CCS 不会编译这样的代码。它只允许在声明时初始化数组:

//compiles nicely:
const char * const teststring[] = {
     "String1",
     "String2",
};

//doesn't compile:
const char *teststring2[2];
teststring2[0]="Hello";
teststring2[1]="World";

这样的代码会导致错误

“char [6]”类型的值不能用于初始化“int [0]”类型的实体

所以对于每个数组条目。

我在这里错过了什么吗?我过去使用过这样的代码并且工作正常。是 TI 的编译器问题,还是处理器特有的问题?应该工作的代码基于此线程:如何在 C 中创建字符串数组?

4

2 回答 2

0

AC 文件,一个翻译单元,只能包含两种类型的元素(经过预处理):函数定义声明声明提供对象的类型和可选的初始值设定项。你所拥有的是statement,它们只允许在function-definition中使用。

换句话说,您需要在声明点提供初始化,或者将它们作为普通赋值移动到函数中。例如:

enum dictionary_indexes {
  name,
  surname,
  phone
}

const char *dictionary_en[60] = {
  [name] = "Your name",
  [surname] = "Your surname"
};

void f (void)
{
  dictionary_en[name]    = "Your name";
  dictionary_en[surname] = "Your surname";
}

请注意,{ [name] = ..., }初始化程序中的语法是在 C99 中引入的。如果您有一个符合早期标准的编译器,则需要在没有指示符的情况下以正确的顺序初始化数组:

const char *dictionary_en[60] = {
  "Your name",
  "Your surname"
};
于 2014-11-22T16:02:04.510 回答
0

teststring2 必须是全局变量,但它的 init 不能。正如@barakmanos 所建议的那样,将 init 包含在可执行函数中的一点点 rafactor 可以带来缓解和正确编译。

const char *teststring2[2];

void initDict(){

    teststring2[0]="Hello";
    teststring2[1]="World";
}
于 2014-11-22T15:20:10.883 回答