Tag: 语法

ANSI-C语法 – 数组声明,如 et alii

来自-link-的ANSI C语法给出了以下数组声明规则: (1) | direct_declarator ‘[‘ type_qualifier_list assignment_expression ‘]’ (2) | direct_declarator ‘[‘ type_qualifier_list ‘]’ (3) | direct_declarator ‘[‘ assignment_expression ‘]’ (4) | direct_declarator ‘[‘ STATIC type_qualifier_list assignment_expression ‘]’ (5) | direct_declarator ‘[‘ type_qualifier_list STATIC assignment_expression ‘]’ (6) | direct_declarator ‘[‘ type_qualifier_list ‘*’ ‘]’ (7) | direct_declarator ‘[‘ ‘*’ ‘]’ (8) | direct_declarator ‘[‘ ‘]’ […]

关于转换为整数常量表达式(在标准C中)

在标准C(我的意思是C99或C11)中,我们有所谓的整数常量表达式 ,它们是常量表达式,其操作数都是常量整数。 还有其他约束,以避免表达式中的逗号运算符。 但是,在某些特殊情况下,允许使用其他非整数对象(甚至是非常量对象)。 例如,如果将sizeof运算符应用于大小在转换时间中已知的对象,则允许将其作为整数常量表达式的一部分 (请注意, sizeof始终返回整数值)。 此外,有时也允许显式转换为整数类型。 标准C99建立以下规则: 标准C99,第6.6节(第6节): 整数常量表达式)应具有整数类型,并且只能具有整数常量,操作数,枚举常量,字符常量,结果为整数常量的sizeof表达式,以及作为强制转换的直接操作数的浮点常量。 标准C99 我的问题是: “浮动常数是演员的直接操作数”的确切含义是什么? 浮点常量类似于3.14e + 3,或者是0x2.11p-5。 也就是说,不是float类型的一般常量表达式,而只是浮点文字。 然后,我明白在上面的定义中只允许这样的事情: (int) 3.14 但是不允许涉及浮动文字的操作 。 这排除了以下情况: (int) -3.14 /* The minus sign is not part of the constant: it is an operator */ (int) (3.14) /* The parenthesis are an operator acting on the literal 3.14 */ […]

C中的硬编码字节数组

我正在调试网络应用程序。 我必须模拟一些交换的数据才能使应用程序正常工作。 在C ++中,你可以做类似的事情 char* myArray = { 0x00, 0x11, 0x22 }; 但是,我似乎无法找到这种语法的C等价物。 基本上我只是想用硬编码值填充数组。

在Haskell和C之间交换结构化数据

首先,我是Haskell的初学者。 我正计划将Haskell集成到C中用于实时游戏。 Haskell做逻辑,C做渲染。 要做到这一点,我必须为每个滴答(每秒至少30次)从彼此传递巨大的复杂结构数据(游戏状态)。 所以传递的数据应该是轻量级的。 该状态数据可以放在存储器上的顺序空间上。 Haskell和C部分都应该自由地访问各州的每个区域。 在最好的情况下,传递数据的成本可以是复制指向内存的指针。 在最坏的情况下,通过转换复制整个数据。 我正在阅读Haskell的FFI( http://www.haskell.org/haskellwiki/FFICookBook#Working_with_structs )Haskell代码看起来明确指定了内存布局。 我有几个问题。 Haskell可以明确指定内存布局吗? (与C结构完全匹配) 这是真正的内存布局吗? 或者需要任何类型的转换? (性能损失) 如果Q#2为真,那么当显式指定内存布局时会有任何性能损失吗? #{alignment foo}的语法是什么? 我在哪里可以找到关于此的文件? 如果我想以最佳性能传递大量数据,我该怎么做? * PS显式内存布局function,我说只是C#的[StructLayout]属性。 这是明确指定内存中位置和大小的。 http://www.developerfusion.com/article/84519/mastering-structs-in-c/ 我不确定Haskell是否具有与C struct字段匹配的语言结构。

如何将三元运算符合并到优先攀爬算法中?

我按照本网页 “优先攀登”部分给出的解释,使用带有各种一元前缀和二进制中缀运算符的优先攀爬算法来实现算术评估器。 我还想包括三元运算符(即三元条件运算符?: :)。 网页上给出的算法使用以下语法: E –> Exp(0) Exp(p) –> P {B Exp(q)} P –> U Exp(q) | “(” E “)” | v B –> “+” | “-” | “*” |”/” | “^” | “||” | “&&” | “=” U –> “-” 如何将三元运算符合并到这个语法中?

C代码后变量名后的冒号

可能重复: ‘unsigned temp:3’是什么意思 这是参考页面的C代码示例。 signed int _exponent:8; “8”和“8”之前结肠的含义是什么?

数组声明的方括号内的星号在C 中是什么意思

我正在编写一个自定义C99解析器。 我从这个链接得到了语法。 这个语法说下面是声明数组的有效语法 – int arr[*]; 以下是语法的相关部分 – direct-declarator ::= identifier “(” declarator “)” direct-declarator “[” type-qualifier-list? assignment-expression? “]” direct-declarator “[” “static” type-qualifier-list? assignment-expression “]” direct-declarator “[” type-qualifier-list “static” assignment-expression “]” direct-declarator “[” type-qualifier-list? “*” “]” direct-declarator “(” parameter-type-list “)” direct-declarator “(” identifier-list? “)” 我尝试使用gcc使用此声明编译代码。 它给了我以下警告 – 错误:除函数原型范围外,不允许使用'[*]’ 所以我尝试使用这种类型的语法声明一个函数原型,并且编译时没有任何错误或警告。 我没有得到的是这种语法在语义上可能意味着什么。 有专家解释吗?

什么是’void(* old_sigint_handler)(int)’?

这是一个语法问题。 我遇到了这条线: void (*old_sigint_handler)(int); 我不知道它在做什么。 它似乎是三种类型的串联,没有变量名称。 我很感激澄清!

将循环放在C宏中

我正在寻找一种方法将以下函数结构转换为宏。 我知道,这是一个愚蠢而毫无意义的例子,但它说明了这一点,因为我无法透露我的实际源代码。 int foo(int x, int y) { do { –x; ++y; }while(x > y); return x * y; //note that x and y have changed values here. } 这样我就可以在main或其他函数中调用函数,如下所示: int next_x = foo(x,y); 我似乎无法在这里获得100%正确的语法。 这是我的不良尝试: #define FOO(x,y) \ ( \ do \ { \ –x; \ ++y; \ }while(x < y), \ x \ […]

在c / c ++中^ =是什么意思?

我有以下代码行: contents[pos++] ^= key[shift++]; 运算符^=是什么意思?