我有一个存储坐标的 struct (xI,yI).

typedef struct _FCOORD{
    float X;
    float Y;
}FCOORD,*PFCOORD;

现在我定义了一个名为point的变量并存储了一些数据

FCOORD point;
point.X=20.00f;
point.Y=20.00f;

我只想像这样加载数据:

point={20.00f,20.00f};

我是用GCC编译器用C语言编写的

C:\My_Assets\MinGW\bin>gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.

我在编译时遇到此错误

gcc -c ./src/main.c -I"F:\Codes\Windows\Application\include"
In file included from ./src/main.c:13:0:
./src/threads.c: In function 'WorkerThread':
./src/threads.c:66:19: error: expected expression before '{' token
     R1_data.start={10,10};
                   ^

EDIT:请也提到 struct 指针的类似情况,即PFCOORD.谢谢.

推荐答案

对于这样的作业(job),您可以使用compound literal:

#include <stdio.h>

typedef struct FCOORD {
    float X;
    float Y;
} FCOORD;

int main()
{
    FCOORD point;
    point.X = 20.00f;
    point.Y = 20.00f;

    point = (FCOORD){ 42.00f, 3.1415927f }; // The RHS here is a compound literal

    printf("%f %f\n", point.X, point.Y);
    return 0;
}

请注意,正如在链接的cp首选项页面上所提到的,尽管它们look很像强制转换,但复合文字是not强制转换,并且行为非常不同.

还要注意,我从您的_FCOORD类型名称中删除了前导下划线;带有前导下划线后跟大写字母的标识符被保留下来,供实现使用.

您还可以将指定的初始值设定项添加到上面代码所示的赋值中;如果您想要"无序"地赋值元素,或者如果有其他不想显式赋值的 struct 成员1,这可能很有用.使用这些代码,代码将如下所示:

    point = (FCOORD){ .Y = 3.1415927f, .X = 42.00f };

1但是,在后一种情况下要小心(其中有未在复合文本中显式设置的成员):这些成员将not保留其‘原始’值,但将被默认初始化.

C++相关问答推荐

如何在Scilab API中求解方程

gcc已编译的可执行文件TSB是否同时暗示最低有效字节和最低有效位?

如何启用ss(另一个调查套接字的实用程序)来查看Linux主机上加入的多播组IP地址?

C指针地址和转换

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

返回一个包含数组的 struct

如何使用低级C++写出数值

将常量转换为指针会增加.数据大小增加1000字节

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

获取每个循环迭代结束时的当前时间

用gcc-msse 2编译的C程序包含AVX 1指令

如何在C中只对字符串(包含数字、单词等)中的数字进行重复操作?

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

C:如何将此代码转换为与数组一起使用?

如何对现有的双向循环链表进行排序?

S,在 struct 中创建匿名静态缓冲区的最佳方式是什么?

从C中的函数返回静态字符串是不是一种糟糕的做法?

C 错误:对 int 数组使用 typedef 时出现不兼容的指针类型问题

一元运算符