相关疑难解决方法(0)

C++或C中foo(void)和foo()之间有区别吗?

考虑这两个函数定义:

void foo() { }

void foo(void) { }
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别吗?如果没有,为什么void那里的论点?美学原因?

c c++ arguments

243
推荐指数
3
解决办法
7万
查看次数

为什么gcc允许将参数传递给定义为不带参数的函数?

我不明白为什么这段代码会编译?

#include <stdio.h>
void foo() {
    printf("Hello\n");
}

int main() {
    const char *str = "bar";
    foo(str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc甚至没有发出警告,我向foo()传递了太多的参数.这是预期的行为吗?

c gcc compiler-errors

73
推荐指数
4
解决办法
4961
查看次数

在现代C和C++中不推荐使用f(void)

我目前正在重构/整理C++项目中使用的一些旧C代码,并定期查看以下函数:

int f(void)
Run Code Online (Sandbox Code Playgroud)

我倾向于写作:

int f()
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不在整个代码库中用()替换(void)以提高一致性,或者两者之间是否存在我不知道的细微差别?更具体地说,如果C++中的虚拟成员函数被描述为:

virtual int f(void)
Run Code Online (Sandbox Code Playgroud)

派生类包括成员函数:

int f()
Run Code Online (Sandbox Code Playgroud)

这是一个有效的覆盖?另外,基于几乎相同的签名,我是否可能遇到任何链接器问题?

c c++ refactoring void

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

c99中的func()vs func(void)

void func() 实际上,空参数表示接受任何参数.

void func(void) 不接受任何争论.

但在标准C99中,我找到了这样的界限:

6.7.5.3函数声明
(包括原型) 14标识符列表仅声明函数参数的标识符.函数声明符中的空列表是该函数定义的一部分,指定该函数没有参数.函数声明符中的空列表不是该函数定义的一部分,它指定不提供有关参数数量或类型的信息.

根据标准,func()并且func(void)是相同的?

c c99

59
推荐指数
4
解决办法
5420
查看次数

int main()和int main(void)之间的区别?

以下是什么意思:

int main(void) {...} 
Run Code Online (Sandbox Code Playgroud)

VS

int main() {...}
Run Code Online (Sandbox Code Playgroud)

我认为这int main() {...}意味着main不接收任何参数(来自命令行),但是:

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

确实.

但这int main(void) {...} 意味着什么?什么是无效主张?

我看过这里,但这是一个不同的问题.

c program-entry-point void

55
推荐指数
3
解决办法
7万
查看次数

为什么在params中放空?

将空隙放入params的原因是什么?

为什么不把它留空?

void createLevel(void);

void createLevel();
Run Code Online (Sandbox Code Playgroud)

c++

32
推荐指数
3
解决办法
8243
查看次数

为什么在调用printf之前%eax归零?

我想拿起一点x86.我正在使用gcc -S -O0在64位mac上进行编译.

C中的代码:

printf("%d", 1);
Run Code Online (Sandbox Code Playgroud)

输出:

movl    $1, %esi
leaq    LC0(%rip), %rdi
movl    $0, %eax        ; WHY?
call    _printf
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在调用'printf'之前%eax被清除为0.由于printf返回打印的字符数量为%eax我最好的猜测,因此将其归零以准备它,printf但我认为printf必须负责准备它.而且,相反,如果我调用自己的功能int testproc(int p1),则gcc认为没有必要准备%eax.所以我想知道为什么gcc对待printftestproc不同.

macos assembly gcc x86-64 cpu-registers

32
推荐指数
3
解决办法
7918
查看次数

这个C for-loop如何打印文本艺术金字塔?

这是我第一次在这里发帖,希望我做得对.

基本上我需要帮助试图找出我用C编写的一些代码.程序的目的是要求用户输入0到23之间的数字.然后,根据用户输入的数字,半金字塔将打印(就像旧学校马里奥游戏中的那些).我是编程的初学者,仅凭运气就得到了我的代码的答案,但现在我无法确定我的for循环如何提供金字塔形象.

#include <stdio.h>

int main ( void )
{
    int user_i;
    printf ( "Hello there and welcome to the pyramid creator program\n" );
    printf ( "Please enter a non negative INTEGER from 0 to 23\n" );
    scanf ( "%d", &user_i );

    while ( user_i < 0 || user_i > 23 )
    {
        scanf ( "%d", &user_i );
    }

    for ( int tall = 0; tall < user_i; tall++ )
    {
        // this are the two for loops that happened …
Run Code Online (Sandbox Code Playgroud)

c for-loop

25
推荐指数
4
解决办法
7163
查看次数

为什么C中函数的原型和定义可能不同?

我想知道为什么这会编译:

int test();

int main() { return test((void*)0x1234); }
int test(void* data) { return 0; }
Run Code Online (Sandbox Code Playgroud)

为什么编译器不会发出任何错误/警告(我试过clang,gcc)?如果我更改返回值它将无法编译 - 但参数可能不同?!

c

20
推荐指数
2
解决办法
483
查看次数

在c:func(void)与func()

当C函数不接受任何参数时,是否必须通过语言规则使用"void"参数声明/定义它?当参数列表中没有任何内容时,PC-Lint似乎有问题,我想知道它是否是我不知道的语言语法中的东西.

编辑:我刚发现一个重复的(后面的傻瓜?它首先出现)问题,C void参数,它有更多的答案和解释.

c lint function void

18
推荐指数
2
解决办法
1万
查看次数