【问题标题】:Issue when defining C struct... (AKA frustration)定义 C 结构时的问题...(又名沮丧)
【发布时间】:2015-06-29 20:49:04
【问题描述】:

嘿,所以我只是想定义一个结构。我可能是个白痴,但是,嘿,我正在努力。

这样做:

struct Neuron{
    float mu;
    float stim[10];
    float hist[10];
    int ns[10000];
    float st[10000];
    float cup[8][10];

};


struct Neuron nur1;


nur1.mu = -0.7;

得到这个:

error: unknown type name 'nur1'

我不明白这是为什么。它们都在同一个 .c 文件中。也许编译问题?只需在 mac OS X 上使用 gcc my_file.c。

【问题讨论】:

  • nur1.mu = -0.7; 不能在全局范围内执行。
  • 你需要发布更多代码,最少main()函数。
  • 如果这是您的全部代码,您需要将除结构声明之外的所有内容都放在函数内(在本例中为main())。
  • 我认为没有必要发布更多代码。当他发布的内容确实是完整的文件内容时,他解决的错误正是 Mac 上 gcc 给出的第一个错误。 (第二个错误是错误:预期的标识符或'(',很奇怪。
  • 你遗漏了一些东西。请发布完整、准确的代码。

标签: c struct


【解决方案1】:

你不能这样说nur1.mu = -0.7。试着把它放在一个函数中(也许是你的main 函数):

int main()
{
nur1.mu = -0.7;
}

【讨论】:

  • 另一个选项,因为 OP 使用的是 GCC,所以在任何名称的函数上使用它的(非标准的、不可移植的)constructor 属性;该函数将在main() 之前被调用以执行它需要的任何初始化。 stackoverflow.com/questions/8433484/… 有一些细节。
【解决方案2】:

你需要有一个主函数;否则编译器不知道在哪里寻找第一个函数的开始。该结构在 main() 之外声明,其他所有内容都在里面,如下所示:

struct Neuron{
    float mu;
    float stim[10];
    float hist[10];
    int ns[10000];
    float st[10000];
    float cup[8][10];
};

int main()
{

struct Neuron nur1;

    nur1.mu = -0.7;
    printf("%f\n", nur1.mu);

}

【讨论】:

    【解决方案3】:

    如果只是为了正确初始化结构,可以使用初始化器。这在文件级别(仅使用常量表达式)或局部变量是允许的。

    struct Neuron nur1 = {
        .mu = -0.7;
    };
    

    .mu 这样的语法被称为指定初始化器 (C99)。

    请注意,这将在程序启动期间执行一次,并且还将所有未显式初始化的字段初始化为 0,就像任何全局对象一样(请参阅 C11 6.7.9p10)。

    【讨论】:

    • 不是“所有位为零”,而是好像由表达式 0 初始化。例如指针变为空,双精度变为0.0,即使这些值不是由全位零表示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2011-05-08
    • 2012-04-02
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多