35得票2回答
复合字面值常量是标准的C++吗?

复合字面量是C99中的一种结构。即使我可以在C++中做到这一点:#include <iostream> using namespace std; int main() { for (auto i : (float[2]) {2.7, 3.1}) cout <<...

33得票5回答
C语言复合字面量,指向数组的指针

我试图将复合字面量赋值给一个变量,但似乎没有成功,看: int *p[] = (int *[]) {{1,2,3},{4,5,6}}; 我在gcc中遇到了一个错误。 但如果我只写这个: int p[] = (int []) {1,2,3,4,5,6}; 那就没问题了。 但这不是我想要的...

19得票3回答
为什么要使用像CGRectMake这样的函数?

我很好奇为什么像CGRectMake和CGPointMake这样的函数存在并被广泛使用,而不是像这样:(CGRect){{x, y}, {width, height}} 我相信这个方案更有效率(虽然我猜效率提升不会太多),因为它没有函数调用。 此外,你还可以设置起点和大小,例如: (CGRe...

18得票2回答
为什么C语言中的复合字面量是可修改的?

通常人们将“不可修改的”与字面量联系起来char* str = "Hello World!"; *str = 'B'; // Bus Error! 然而,当使用复合文字时,我很快发现它们是完全可修改的(并且查看生成的机器代码,您会看到它们被推送到堆栈上):char* str = (char[...

17得票2回答
GCC发出复合字面量和指定初始化警告,但Clang没有。

使用gcc -std=c99 -Wextra编译以下代码: #include <stdio.h> struct T { int a; int *b; int c; }; int main(void) { struct T t = {.b = (...

17得票5回答
C99中的静态结构初始化

在 c99/gnu99 模式下,当我使用复合字面量对静态结构体进行初始化时,遇到了奇怪的行为。显然,以下代码是正确的: struct Test { int a; }; static struct Test tt = {1}; /* 1 */ 然而,这并不是: static s...

13得票1回答
如何解析:使用大括号初始化列表构建无名临时对象。

我最近又一次遇到了这个符号。 ( const int[10] ){ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 } 据我记得,在C和C++中都是允许的,但是通过完全不同的语言机制来实现。 我相信在C++中,正式观点是通过显式类型转换`(T)`cast-expressio...

13得票1回答
C - 创建匿名结构体实例

在这段代码中,定义了一个结构体如下: typedef struct { int line; int column; } Pos; 后来被这样使用:Pos get_pos ( int delta ) { ... return ( Pos ){ f->l...

10得票1回答
为什么无法将常量数组作为参数传递?

在C语言中,为什么我不能这样做:arrayfn({1.0, 2.0, 3.0}); 如果arrayfn是一个接受类型为double[]或double*的单个参数的函数,那么尝试这样会导致语法错误。 在C中是否有一种方法可以实现这样的功能 - 生成并立即传递在编译时已知的数组 - 而不必花费一...

10得票2回答
C语言中的神秘结构定义

我遇到了以下迷宫定义代码: typedef struct mazeNode { int hasCheese; int tag; struct mazeNode *left; struct mazeNode *right; } maze_t; maze_t m...