相关疑难解决方法(0)

"for(;;)"比"while(TRUE)"快吗?如果没有,为什么人们会使用它?

for (;;) {
    //Something to be done repeatedly
}
Run Code Online (Sandbox Code Playgroud)

我已经看到这种东西使用了很多,但我觉得它很奇怪......说再说清楚while(true),还是沿着这些方向做些什么?

我猜这(因为许多程序员采用神秘的代码的原因)这是一个微小的利润更快?

为什么,它真的值得吗?如果是这样,为什么不这样定义它:

#define while(true) for(;;)
Run Code Online (Sandbox Code Playgroud)

另请参见:哪个更快:while(1)或while(2)?

c c++ optimization readability infinite-loop

160
推荐指数
17
解决办法
4万
查看次数

函数声明与原型的替代(K&R)C语法

这个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

69
推荐指数
3
解决办法
1万
查看次数

K&R中的C函数声明

我不熟悉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

11
推荐指数
2
解决办法
3875
查看次数

C语言中的混淆代码

请解释C中的以下代码片段是如何有效的

int main(c, v) char *v; int c;{
 //program body
}
Run Code Online (Sandbox Code Playgroud)

我偶然发现了国际混淆C代码竞赛中的一些例子,我只是好奇.

c

5
推荐指数
1
解决办法
501
查看次数

为什么gcc将8字节格式的char类型传递给函数汇编

为了学习汇编,我正在查看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 assembly gcc x86-64

5
推荐指数
2
解决办法
424
查看次数

括号和花括号之间的变量

我下载了一段C代码,它使用了这种定义函数的方式:

int somefunction(name1, name2) 
int name1;
int name2;
{
    // do stuff, using name1 and name2
}
Run Code Online (Sandbox Code Playgroud)

为什么或何时使用这种语法,它与括号内参数类型的更为人熟知的语法有何不同?

c syntax function

4
推荐指数
1
解决办法
838
查看次数

c,结构后面的函数定义

  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 freebsd

3
推荐指数
1
解决办法
79
查看次数

功能中标识符列表和参数列表的区别?

对于这个引用:

函数声明符中不属于该函数定义的标识符列表应为空.

标识符列表和参数列表之间有什么区别,有人可以提供此引用的示例.

c declaration function definition

1
推荐指数
1
解决办法
217
查看次数

c 和 c++ 函数声明和定义:指定数据类型

我正在将 c 代码移植到 c++。下面的 C 程序编译成功。但是在 C++ 中,它会引发错误。我知道它非常基本的东西。我以这种方式声明了 100 多个函数。是否有任何标志我们可以添加以成功编译而不是修改所有函数。

  • 操作系统:Windows
  • IDE:Visual Studio
int sum(m,n)
int m,n;
{
    return m+n;
}
Run Code Online (Sandbox Code Playgroud)

c c++ function visual-c++

1
推荐指数
1
解决办法
63
查看次数

变量的声明和赋值在 K&R 中的不同行是否有原因?

我开始阅读The C Programming Language,我注意到变量的声明和它们的分配在不同的行上。例如,从第 16 页开始:

int c;
c = getchar();
Run Code Online (Sandbox Code Playgroud)

int c = getchar();没有不写的原因(一般来说,为什么赋值和声明不在同一行)?当我运行它而不是前者时,它似乎工作正常。

c variable-declaration

1
推荐指数
1
解决办法
79
查看次数

为什么我在运行时遇到此错误?

我在观看教程的同时编写了这个程序来比较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

0
推荐指数
1
解决办法
705
查看次数

声明具有此规范的函数

我最近看到C中的以下代码据说有效,但我不确定.

    int max(x,y)
    int x,y;
    {
    return (x>y)?x:y;
    }
Run Code Online (Sandbox Code Playgroud)

这种功能原型有效吗?如果是这样,请提供一些参考,以了解更多相关信息.

c function-prototypes

0
推荐指数
1
解决办法
54
查看次数