许多程序对许多参数和字符串数组使用标准名称.main函数的原型如下:int main(int argc, char *argv[]);.但是,如果我为这些变量 Select 自定义名称,我会 destruct 某些东西吗?

例如int main(int n_of_args, char *args[]);

在编译器的上下文中,一切都很好.这些变量是main函数的局部变量,因此它们可以有任何名称.简单的代码可以完美地构建和运行.但预处理器可能会使用这些名称.那么,重命名这些参数安全吗?

就我个人而言,我觉得这些名字不好,因为它们看起来非常相似,而且只有一个字母不同.但每个人都会出于某种原因使用它们.

推荐答案

是的,只要使用有效的变量名,它是安全的.它们是局部变量,所以它们的作用域不超过main函数.

C standard的第5.1.2.2.1节开始:

程序启动时调用的函数名为main.这个 实现没有声明此函数的原型.它应该是 定义为返回类型int且不带参数:

int main(void) { /*  ... */ }

或者使用两个参数(这里称为argcargvthough any names may be used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ...   */ }

或同等品;或者以其他实现定义的方式

也就是说,使用argcargv之外的任何东西都可能会让其他阅读您的代码的人感到困惑,因为他们已经习惯了这些参数的常规名称.所以最好站在克莱里蒂一边.

C++相关问答推荐

想了解 struct 指针和空指针转换

为什么复合文字(C99)的返回会生成更多的汇编代码?

如何创建由符号组成的垂直结果图形?

为什么在C中进行大量的位移位?

为什么在此程序中必须使用Volatile关键字?

如果包含路径不存在,我的编译器可以被配置为出错吗?(GCC、MSVC)

fwrite无法写入满(非常大)缓冲区

调用mProtection将堆栈上的内存设置为只读,直接导致程序SIGSEGV

在Apple Silicon上编译x86的Fortran/C程序

在每种If-Else情况下执行语句的最佳方式

在创建动态泛型数组时,通过realloc对故障进行分段

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

如何在GDB中查看MUSL的源代码

程序对大输入给出错误答案

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

共享内存未授予父进程权限

传递参数:C 和 C++ 中 array 与 *&array 和 &array[0] 的区别

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?

为什么需要struct in_addr

初始化动态分配的布尔二维数组的最佳方法是什么?