for (;;) {
//Something to be done repeatedly
}
Run Code Online (Sandbox Code Playgroud)
我已经看到这种东西使用了很多,但我觉得它很奇怪......说再说清楚while(true),还是沿着这些方向做些什么?
我猜这(因为许多程序员采用神秘的代码的原因)这是一个微小的利润更快?
为什么,它真的值得吗?如果是这样,为什么不这样定义它:
#define while(true) for(;;)
Run Code Online (Sandbox Code Playgroud)
这个C语法有什么用- 使用'K&R'样式函数声明?
int func (p, p2)
void* p;
int p2;
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我能够在Visual Studios 2010beta中写这个
// yes, the arguments are flipped
void f()
{
void* v = 0;
func(5, v);
}
Run Code Online (Sandbox Code Playgroud)
我不明白.这种语法有什么意义?我可以写:
int func (p, p2)
int p2;
{
return 0;
}
// and write
int func (p, p2)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它似乎唯一指定的是它使用了多少参数和返回类型.我猜没有类型的参数有点酷,但为什么允许它和int paranName函数声明后?有点奇怪.
这还是标准的C吗?
c function kernighan-and-ritchie function-declaration function-definition
我不熟悉K&R风格的功能声明.
编译之后,带有警告(仅与main的返回值相关-Wall)但是使用的变量的数据类型是什么?
main(a, b, c, d){
printf("%d", d);
}
foo(a, b){
a = 2;
b = 'z';
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个问题,请在评论部分提供链接.我找不到类似的东西.
编辑
我刚刚遇到了一个混淆的C代码,它使用了这些代码.
但我可以向你保证,我不会在C编程中使用这样的语法.
请解释C中的以下代码片段是如何有效的
int main(c, v) char *v; int c;{
//program body
}
Run Code Online (Sandbox Code Playgroud)
我偶然发现了国际混淆C代码竞赛中的一些例子,我只是好奇.
为了学习汇编,我正在查看GCC使用-S命令为一些简单的c程序生成的汇编.我有一个add函数,它接受一些int和一些char并将它们加在一起.我只是想知道为什么char参数被压缩到8个字节(pushq)?为什么不只推一个字节?
.file "test.c"
.text
.globl add
.type add, @function
add:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
movl %edx, -12(%rbp)
movl %ecx, -16(%rbp)
movl %r8d, -20(%rbp)
movl %r9d, -24(%rbp)
movl 16(%rbp), %ecx
movl 24(%rbp), %edx
movl 32(%rbp), %eax
movb %cl, -28(%rbp)
movb %dl, -32(%rbp)
movb %al, -36(%rbp)
movl -4(%rbp), %edx
movl -8(%rbp), %eax
addl %eax, %edx
movl -12(%rbp), %eax
addl %eax, %edx
movl -16(%rbp), %eax
addl %eax, …Run Code Online (Sandbox Code Playgroud) 我下载了一段C代码,它使用了这种定义函数的方式:
int somefunction(name1, name2)
int name1;
int name2;
{
// do stuff, using name1 and name2
}
Run Code Online (Sandbox Code Playgroud)
为什么或何时使用这种语法,它与括号内参数类型的更为人熟知的语法有何不同?
675 * Check the validity of an ACL for a file.
676 */
677 int
678 ufs_aclcheck(ap)
679 struct vop_aclcheck_args /* {
680 struct vnode *vp;
681 acl_type_t type;
682 struct acl *aclp;
683 struct ucred *cred;
684 struct thread *td;
685 } */ *ap;
686 {
687
688 if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0)
689 return (EOPNOTSUPP);
690
691 if (ap->a_type == ACL_TYPE_NFS4)
692 return (ufs_aclcheck_nfs4(ap));
693
694 return (ufs_aclcheck_posix1e(ap));
695 }
696
697 #endif /* !UFS_ACL …Run Code Online (Sandbox Code Playgroud) 对于这个引用:
函数声明符中不属于该函数定义的标识符列表应为空.
标识符列表和参数列表之间有什么区别,有人可以提供此引用的示例.
我正在将 c 代码移植到 c++。下面的 C 程序编译成功。但是在 C++ 中,它会引发错误。我知道它非常基本的东西。我以这种方式声明了 100 多个函数。是否有任何标志我们可以添加以成功编译而不是修改所有函数。
int sum(m,n)
int m,n;
{
return m+n;
}
Run Code Online (Sandbox Code Playgroud) 我开始阅读The C Programming Language,我注意到变量的声明和它们的分配在不同的行上。例如,从第 16 页开始:
int c;
c = getchar();
Run Code Online (Sandbox Code Playgroud)
有int c = getchar();没有不写的原因(一般来说,为什么赋值和声明不在同一行)?当我运行它而不是前者时,它似乎工作正常。
我在观看教程的同时编写了这个程序来比较C中"按值调用"和"按引用调用"之间的区别.但是我收到错误:
运行命令:第1行:1508分段错误:11 ./"$ 2""$ {@:3}"
救命?
main()
{
int a,b;
scanf("%d %d", &a, &b);
printf("Before Call %d %d", a,b);
exch_1(a,b);
printf("After first call %d %d", a,b);
exch_2(a,b);
printf("After second Call %d %d \n", a,b);
}
exch_1(i,j)
int i, j;
{
int temp;
temp = i;
i = j;
j = temp;
}
exch_2(i,j)
int *i, *j;
{
int temp;
temp = *i;
*i = *j;
*j = temp;
}
Run Code Online (Sandbox Code Playgroud) 我最近看到C中的以下代码据说有效,但我不确定.
int max(x,y)
int x,y;
{
return (x>y)?x:y;
}
Run Code Online (Sandbox Code Playgroud)
这种功能原型有效吗?如果是这样,请提供一些参考,以了解更多相关信息.
c ×12
function ×4
c++ ×2
assembly ×1
declaration ×1
definition ×1
freebsd ×1
gcc ×1
optimization ×1
readability ×1
syntax ×1
visual-c++ ×1
x86-64 ×1