Tag: 语法

PHP数组语法/运算符?

在PHP中编写关联数组的语法时,我们执行以下操作 $a = array(‘foo’ => ‘bar’); 我很好奇=>语法的关系,或者可能是运算符。 这是否与ZE中哈希表中使用的某种引用有关,或者与C使用的某种后续右移或引用有关? 我想我只是想知道这个语法的真正根本目的,它是如何与用于处理数组的ZE和/或php扩展相关,它如何与编译前C的书面函数相关,或者如果我只是不知道是什么我在说:)

三星:char *(* arr)和char *** arr(在C中)有什么区别?

基本上,我有一个char *数组,我想在这个函数中传递和修改,所以我传入一个指向char *数组的指针。 也就是说,我想传递一个指向char * arr []的指针。 两者有什么区别?

从icc获取Intel-syntax asm输出,而不是默认的AT&T语法?

我遇到了问题。 我一直在使用gcc来编译/汇编我的C代码一段时间,并习惯于阅读英特尔汇编语法。 我在生成程序集文件时使用了-masm=intel标志。 然而最近,由于公司迁移,他们获得了英特尔的icc,声称它更好。 所以现在我需要使用icc,但奇怪的是它有默认的汇编语法为AT&T。 我试图改变它,但它没有用,所以我联系了英特尔支持,他们也不知道,每个人都给了我一个矛盾的答案。 有没有办法集成gcc和icc,以便我使用icc编译“优势”,同时用gcc编译intel的语法? 我正在使用ubuntu并获得了icc版本12.x.

为什么c函数可以这样定义?

可能重复: 这个C语法的用处是什么? C中这个奇怪的函数定义语法是什么? static void add_shopt_to_alist (opt, on_or_off) char *opt; int on_or_off; { … } 语法是什么: (opt, on_or_off) char *opt; int on_or_off; ?

在switch语句中使用Obj-C对象时出现奇怪的编译器错误

在switch语句中使用Objective-C对象时出现编译器错误: switch (myConstant) { case 0: UIViewController *myController = [[[UIViewController alloc] init] autorelease]; [self.navigationController pushViewController:myViewController animated:YES]; break; case 1: // stuff break; default: break; } 错误说明: ‘UIViewController’之前的预期表达式 ‘myViewController’未声明(首次在此函数中使用) 我理解第二个错误是第一个错误的直接结果,但我不明白为什么我首先得到’预期表达’错误… 如果我放一个; 在case 0:结尾case 0:行,然后它会编译,但我不应该这样做,不是吗? 这也将无法编译,具有相同的错误: switch (0) { case 0: int a = 0; break; default: break; } 但是,如果我声明int a; 在开关块外面,则a = 0; 编译好。 我以为我理解转换语句 – […]

这个函数定义如何工作?

我几天前用gperf生成了一个哈希函数。 我看到hash函数对我来说是陌生的。 它是这样的(我不记得确切的语法): unsigned int hash(str, size) register char* str; register unsigned int size; { //Definition } 现在,当我尝试使用C ++编译器(g ++)进行编译时,由于没有声明str和size因此向我提出错误。 但这是在C编译器(gcc)上编译的。 所以,问题: 我认为C ++是C的超集。如果是这样的话,这应该用C ++编译器编译吧? C编译器如何理解定义? str和size在首次出现时未声明。 在函数签名之后但在函数体之前声明str和size的目的是什么,而不是遵循在两个地方中的任何一个中执行它的正常方法? 如何在g ++上编译此函数,以便在C ++代码中使用它? 或者我应该尝试从gperf生成C ++代码? 那可能吗?

在ANSI C前语法中混淆函数调用

我正在处理一些pre-ANSI C语法。 请参阅我在一个条件中有以下函数调用 BPNN *net; // Some more code double val; // Some more code, and then, if (evaluate_performance(net, &val, 0)) { 但是函数evaluate_performance定义如下( 在具有上述条件的函数下面 ): evaluate_performance(net, err) BPNN *net; double *err; { 为什么用两个参数定义evaluate_performance ,但用三个参数调用? ‘0’是什么意思? 顺便说一下,我很确定它没有调用其他地方定义的其他evaluate_performance ; 我已经浏览了所有涉及的文件,我很确定我们应该在这里讨论相同的evaluate_performance 。 谢谢!

理解for循环的退出条件

读完这个post后我有了这个问题用C语言打印二进制表示forms的int 在用户注释中,他们发布了for循环,它为位位置分配1或0,以便从int decimal转换为char * binary。 for(; bits–; u >>= 1) str[bits] = u & 1 ? ‘1’ : ‘0’; 我理解为什么不需要初始值。 这是我一直都知道的for循环的语法: for ( variable initialization; condition; variable update ) 我不明白的是’bit–‘如何成为退出条件。 请帮助我理解这段代码是如何工作的(我测试了它,它是有效的)。 谢谢。

为什么这些冲突出现在XML的以下yacc语法中

我有以下XML语法,工作正常: program : ” root ; root : ” node_list ” ; node_list : node_s | node_list node_s ; node_s : node | u_node | ID ; node : ” ; u_node :” node_list ” |” ” ; attribute_list : attributes | ; attributes : attribute | attributes attribute ; attribute : ID ASSIGNOP ‘”‘ […]

指针语法混乱(* ptr vs ptr)

我花了几天时间试图理解指针,但语法仍然让我感到困惑。 写的时候说, int *ptr; ,这个声明之后ptr和*ptr什么区别? 在K&R中,他们从这个例子开始关于指针的章节: int x = 1, y = 2, z[10]; int *ip; /* ip is a pointer to int */ ip = &x; /* ip now points to x */ y = *ip; /* y is now 1 */ *ip = 0; /* x is now 0 */ ip = &z[0]; […]