c - 为什么 C 中 void 主函数内的参数值初始化为 1?
问题描述
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(main) {
clrscr();
printf("%d",main +=pow(++main,++main));
getch();
}
所以,我在 turboC 编译器 n 中运行了上面的代码,得到了输出 12。我注意到这里 main 的值总是用 1 初始化。所以我想知道为什么它的值是 1?为什么没有别的??请任何人帮助我:)
注意:我还尝试用 x、y 等其他名称更改参数“main”的名称。值仍然为 1,并且输出也相同,即 12。
解决方案
在严格符合 C 代码中, main 应声明为以下之一或等效项:
int main(void)
int main(int argc, char *argv[])
当main
用后者声明时,argv
包含指向字符串(的第一个字符)argc
的指针,并包含argv
. argv[0]
表示程序名,后面的元素是程序的参数。
您的编译器正在接受一种非常古老的语法,其中可以在声明中省略类型。所以int main(x)
声明x
为 type 的参数int
。这不是严格符合 C,但您的编译器正在接受它。
当您运行不带参数的程序时,它只传递程序名称,在argv[0]
. 由于只有程序名称而没有参数,argc
因此设置为 1。
使用main
参数名称,如int main(main)
,是不好的做法,但它没有特殊效果,除了它导致函数内部的标识符“main”引用参数而不是函数。
推荐阅读
- android - React Native 应用程序在 Google Play 商店上传 apk 后崩溃,它仅在第一次崩溃
- javascript - 根据另一个数组的值显示数组的值
- google-chrome - Chrome 浏览器在启动浏览器后未获取 URL。我将所有最新版本用于(浏览器、Selenium、驱动程序管理器、ChromeDriver)
- amazon-web-services - 无法为 cloudwatch 导出器 prometheus 列出 AWS/EC2、AWS/S3、AWS/Glue 命名空间指标
- javascript - 在 JS 上积累时如何使用 CSS 过渡?(代码突然不起作用)
- java-8 - 仅在包含字母和整数的字符串中查找整数出现
- python - 获取数据框中不正确拼写单词的字典
- json - 如何停止 JSON 路径返回对象
- spring-boot-maven-plugin - MappingException:无法确定类型:org.springframework.boot.configurationprocessor.json.JSONObject
- python-3.x - Termux 中的 Firefox Selenium