Tag: 初始化

为什么这个嵌套的宏替换失败了?

我正在尝试应用X宏概念,以便有可能将所有struct成员初始化为自定义默认(无效)值。 我写下面的代码: #define LIST_OF_STRUCT_MEMBERS_foo \ X(a) \ X(b) \ X(c) #define X(name) int name; struct foo { LIST_OF_STRUCT_MEMBERS_foo }; #undef X #define X(name) -1, static inline void foo_invalidate(struct foo* in) { *in = (struct foo){ LIST_OF_STRUCT_MEMBERS_foo }; } #undef X #define X(name) -1, #define foo_DEFAULT_VALUE { LIST_OF_STRUCT_MEMBERS_foo } #undef X static struct foo test = […]

arrays初始化的时间复杂度是多少?

考虑以下两种C或C ++中的数组初始化情况: 情况1: int array[10000] = {0}; // All values = 0 案例2: int array[10000]; for (int i = 0; i < 10000; i++) { array[i] = 0; } 他们俩都花时间吗? 案例1的复杂性是什么? 哪个更好?

C ++ – 数组的初始化程序太多

我已经制作了这样的数组但是它一直说我有太多的初始化器。 我该如何解决这个错误? int people[6][9] = {{0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}};

为什么文件范围静态变量必须为零初始化?

C ++默认初始化不会将变量与自动存储器清零,为什么对静态存储变量进行特殊处理? 它是由C和C ++定义的东西必须兼容吗? 如果是这样的话,为什么C决定进行零初始化? 如果文件范围静态变量与初始化程序一起提供,它们将首先进行零初始化,然后再次进行常量/动态初始化。 这不是多余的吗? 例如,以下代码来自cppreference: http : //en.cppreference.com/w/cpp/language/zero_initialization #include double f[3]; // zero-initialized to three 0.0’s int* p; // zero-initialized to null pointer value std::string s; // zero-initialized to indeterminate value // then default-initialized to “” int main(int argc, char* argv[]) { static int n = argc; // zero-initialized to 0 // […]

在C / C ++中取消初始化变量

这是一个理论问题而不是实际问题,但我想知道是否可以在C(或C ++)中取消初始化变量。 所以我们假设我们有以下代码: void some_fun() { int a; // <– Here a is an un-initialized variable, it's value is the value // found in the memory at the given location. a = 7; // Now I have initialized it // do something with a … // and here do something again with a that it […]

是否允许比特字段的聚合初始化?

我有一个包含位字段的结构: struct Foo { unsigned a : 16, b : 16; }; 我想知道我是否可以在它的位字段上使用聚合初始化。 例如: struct Foo bar = {13, 42}; 我注意到这在gcc 5.1和Visual Studio 2015中都有效。我只想certificate这是C和C ++的标准批准初始化。

数组初始化中数组元素的赋值

考虑以下简单程序: #include int main(void) { int a[5] = { a[2] = 1 }; printf(“%d %d %d %d %d\n”, a[0], a[1],a[2], a[3], a[4]); } 使用GCC 7.3.0输出 1 0 1 0 0 考虑到a[1]为零,似乎初始化类似于 int a[5] = { 1 }; a[2] = 1; 问题是:虽然初始化程序可以是任何通用表达式,其初始化和赋值顺序是什么? 这甚至是有效且定义明确的吗? 可能是实现定义,未定义或未指定? 这个问题与C中关于数组初始化的混淆问题有关 。

C中的静态结构初始化

我有一个结构类型,如下所示: typedef struct position{ float X; float Y; float Z; float A; } position; typedef struct move{ position initial_position; double feedrate; long speed; int g_code; } move; 我试图静态初始化它,但我还没有找到办法。 这可能吗?

如何将数组的所有元素初始化为零,并将第一个元素初始化为1

这是程序数组自动初始化为零,当声明为int arr [10] = {1}时,第一个元素初始化为1 #include int main() { int i; int arr[10]={1}; for(i=0;i<10;i++) { printf("\n%d",arr[i]); } return 0; } 如何将数组元素初始化为零,期望第一个元素?

在C,C ++中进行初始化排序

考虑以下初始化: /* C, C++ */ int a[] = { f(), g() }; struct { int x, y } foo = { f(), g() }; /* C++ */ struct goo { goo(int x, int y); }; goo b = { f(), g() }; goo c { f(), g() }; /* C++11 */ goo d ( f(), […]