相关疑难解决方法(0)


C的main()函数的有效签名是什么?

C中主要功能的有效签名究竟是什么?我知道:

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

还有其他有效的吗?

c signature entry-point language-lawyer function-prototypes

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

void main和int main之间的区别?

我声明我的C++程序的方式有关系吗?

c++ standards

54
推荐指数
6
解决办法
6万
查看次数

C中的int main()vs void main()

在C中,我知道int main()返回一个int,其中void main()没有.除此之外,他们之间有区别吗?第一个好于第二个?

c int program-entry-point void

33
推荐指数
2
解决办法
13万
查看次数

当main没有参数定义时,argc和argv是否仍然存在于堆栈中?

考虑非常简单:

int main(void) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译它(使用mingw32-gcc)并执行它main.exe foo bar.

现在,我曾预料到由明确声明为丧失生命参数的主函数引起的某种崩溃或错误.缺乏错误导致了这个问题,这实际上是四个问题.

  • 为什么这样做?答:因为标准是这样说的!

  • 输入参数是否被忽略或者是否使用argc&argv静默编写堆栈?答:在这种特殊情况下,堆栈已准备就绪.

  • 我如何验证以上内容?答:请参阅rascher的回答.

  • 这个平台依赖吗?答:是的,不.

c mingw

21
推荐指数
3
解决办法
6530
查看次数

为什么你会在C中的main()函数之前使用数据类型?

很多人都熟悉C语言中的hello world程序:

#include <stdio.h>

main ()
{
    printf ("hello world");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么有些在main()函数之前,int如下所示:

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

另外,我已经看到void输入的内容()如下:

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

这似乎是额外的打字,但也许这是一个在其他情况下支付红利的最佳做法?

另外,main()如果你要返回一个字符串,为什么会先加一个int?如果有的话,人们会期望:

char main(void)
Run Code Online (Sandbox Code Playgroud)

关于为什么我们在函数结束时返回0也很模糊.

c program-entry-point

13
推荐指数
3
解决办法
4704
查看次数

用int main(void)编译失败; main(int argc,char*argv [])成功.为什么?

问题

如果程序不使用命令行传递的参数,为什么编译具有int main(void)main函数的程序与编译具有int main(int argc, char *argv[])main函数的程序不同?

这个OS或编译器是否具体?我使用mingw和g ++得不到相同的结果(这很奇怪不是因为wingw是gcc的一个端口).


#include <iostream>
#include"SDL/SDL.h"
int main(void)
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译命令

g++ test.cpp; #g++ 4.4.5
i586-mingw32msvc-g++ test.cpp; # mingw 4.4.4
Run Code Online (Sandbox Code Playgroud)

错误

(由第二个命令给出.)

a(main.o):(.text+0x85): undefined reference to `_WinMain@16'
Run Code Online (Sandbox Code Playgroud)

c++ program-entry-point sdl mingw g++

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

无Stackoverflow:循环中的自动对象

我正在浏览某人的代码,在那里我遇到了一个帖子:

while(TRUE)

{
 ......
 STRUCT_MSG_SYS_HEADER  sysHdr;
 .....
 ....
}
Run Code Online (Sandbox Code Playgroud)

这样有五个线程,我的观点是"STRUCT_MSG_SYS_HEADER sysHdr;" 在一段时间或几天之后会导致stackoverflow ...(虽然没有测试).所以我决定编写一个简单的示例应用程序

  1 #include "stdio.h"
  2
  3 struct infinite
  4 {
  5     int arr[1000000];
  6 }infinite;
  7
  8 int main()
  9 {
 10     while(1)
 11     {
 12         struct infinite infobj;
 13         printf("\ninfinite = %x\n", &infobj);
 14     }
 15     return 0;
 16 }
Run Code Online (Sandbox Code Playgroud)

但在这里它为infobj打印相同的地址.我对stackoverflow的想法是错误的还是编译器已经做了一些优化?(我认为自己是个好编码员,但这些事情迫使我再次思考,再次阅读丹尼斯·里奇)

c stack-overflow

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

main()的多重定义

嗨伙计们试图使用两个main()并获得此错误多次定义main().我重命名了我的主要功能然后为什么是这个错误,并且首先在这里为我的print()定义.头文件:

#ifndef TOP_H_
#define TOP_H_

#include <stdio.h>
#include <string.h>
#define onemain main
#define twomain main
inline void print();


#endif /* TOP_H_ */
Run Code Online (Sandbox Code Playgroud)

c文件一:

#include "top.h"
void print();
int onemain()
{
    print();
    return 0;
}
void print()
{
printf("hello one");
}
Run Code Online (Sandbox Code Playgroud)

c文件二:

#include "top.h"
void print();
int twomain()
{
    print();
    return 0;
}
void print()
{
printf("hello two");
}
Run Code Online (Sandbox Code Playgroud)

错误快照

c program-entry-point multiple-definition-error

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

与C中的全局变量和本地变量相同

我得到了答案i = 2.但我的问题是i = 0发生了什么?根据我的理解,i = 0将在DATA SEGMENT中I = 2将在STACK SEGMENT中

#include <stdio.h>
int i = 0;
void main()
{
    int i = 2;
    printf("i value is %d\n",i);`
}
Run Code Online (Sandbox Code Playgroud)

c

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