我在C中声明如下:
$newkey='myNewKey';
$newval='myNewValue';
foreach($results as &$row){ //use reference variable
$row[$newkey] = $newval;// remove the second foreach if not necessary
//if second foreach is necessary then add it no problem
}
是否可以实施此类代码? C将如何允许我们这样编码? 函数调用abcd()会将'q'作为char还是整数?
答案 0 :(得分:8)
引用同一对象或函数的所有声明都应具有兼容类型;否则,行为未定义。
void abcd(int, char);
是一个外部声明,其中abcd
将int
和char
作为参数。它与extern void abcd(char);
不兼容,char
表示同一个函数现在只需要一个void abcd_c(char x){};
void abcd_i(int x){};
int main(int argc, char *argv[])
{
#define abcd abcd_c
abcd('t');
abcd('e');
abcd('s');
abcd('t');
#undef abcd
#define abcd abcd_i
abcd(123);
#undef abcd
}
作为参数。
如果我正确读取标准,这不是约束错误,因此编译器不需要为此生成警告。它仍然是破碎和错误的。
答案 1 :(得分:2)
#define/#undef
您只需使用{{1}}在代码部分中选择想要的行为
答案 2 :(得分:2)
我相信在C中你不能这样做。实际上编译器甚至都不会“哭”,因为这在语法上是正确的。但另一方面,这是错误的,不会执行。就个人而言,我非常关注编译器接受的错误但会破坏执行。 一般来说,在这种情况下,您必须使用正确的参数,字符在main之上声明此函数。因为C会查找这个特定函数的声明,但她找不到它。 在C ++中,它很容易,因为你可以重载函数,编译器只能从参数类型中理解。