假設我有這個簡單的程式:
#include <stdio.h>
typedef struct foo {
int bar;
int baz;
double qux;
} foo_t;
foo_t my_foo = {
.bar = 0,
.baz = 0,
.qux = 0,
};
int main() {
my_foo.bar = 100;
my_foo.baz = my_foo.bar/2 4;
my_foo.qux = my_foo.bar/3.0 my_foo.baz/5.0;
printf("Hello, world %f!", my_foo.qux);
return 0;
}
上面,我使用“指定初始化程式樣式”{ .bar = 0, ...}來初始化 struct 變數,我認為這是一種速記。
我想知道 - 是否有一些速記語法,也允許對同一結構變數的欄位進行操作?例如,不要寫:
my_foo.bar = 100;
my_foo.baz = my_foo.bar/2 4;
my_foo.qux = my_foo.bar/3.0 my_foo.baz/5.0;
...我可以想象這樣的速記語法(下面的偽代碼有點受 Python 啟發):
with(my_foo) {
.bar = 100;
.baz = .bar/2 4;
.qux = .bar/3.0 .baz/5.0;
}
C(更具體地說,C99)中有類似的東西嗎?
uj5u.com熱心網友回復:
C 沒有這樣的語法。您需要指定結構變數,后跟成員名稱。
最接近這一點的是創建指向每個成員的指標并使用它們。
int *bar = &foo.bar;
int *baz = &foo.baz;
double *qux = &foo.qux;
*bar = 100;
*baz = *bar/2 4;
*qux = *bar/3.0 *baz/5.0;
uj5u.com熱心網友回復:
使用 KISS 原則。意思是堅持簡單的現有功能,以創建可讀、可維護的代碼:
void fooify (foo_t* dst, const foo_t* src)
{
int bar = src->bar;
int baz = src->baz;
double qux = src->qux;
bar = 100;
baz = bar/2 4;
qux = bar/3.0 baz/5.0;
*dst = (foo_t)
{
.bar = bar,
.baz = baz,
.qux = qux,
};
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477685.html
上一篇:如何洗掉字串中甚至出現的子字串
