user-0 提问: if语句中的return 1和return 0有什么区别啊？

回复:
user: user-0
content: 引用 27 楼 dic_008 的回复:返回0  或者 1都是在特定环境定义的。  比如在VC中提供的工具Error lookup中 0代表，操作成功完成。  1代表函数不正确。 printf("usage:%s oldpath newpath\n",argv[0]);         return 1; 我开始也是这样理解的，直到看到这段程序我才上来问问，这里return 1;明显是表示成功操作了

user: user-1
content: 学习下。。。。

user: user-2
content: 是函数的错误码而已，

user: user-3
content: 返回0  或者 1都是在特定环境定义的。  比如在VC中提供的工具Error lookup中 0代表，操作成功完成。  1代表函数不正确。

user: user-4
content: 调用这个命令的程序可能需要知道，是否成功与否

user: user-5
content: 引用 25 楼 abc594986308 的回复:[quote=引用 19 楼 u010165006 的回复:] [quote=引用 18 楼 zhao4zhong1 的回复:] [quote=引用 15 楼 u010165006 的回复:] errorlevel，编写批处理程序的时候有用（如果程序正确完成，转到哪里执行；如果出错1，转到哪里；出错2，转到哪里，等等等，从高到低的，DOS时代的东西了，不过Linux系统也一样）。 你在命令行下试一下： dir echo  %errorlevel% dir  z:   （没有Z:盘，肯定出错） echo  %errorlevel% 也可以运行你的程序让它以正常或非正常退出，再echo  %errorlevel% 英雄所见略同。[/quote] 都是DOS过来的[/quote]那return语句可不可以去掉？去掉了报错啊[/quote] int main()，返回值就是int的，如果void main()可以不要return，新的C标准应该都是int main()吧。

user: user-0
content: 引用 19 楼 u010165006 的回复:[quote=引用 18 楼 zhao4zhong1 的回复:] [quote=引用 15 楼 u010165006 的回复:] errorlevel，编写批处理程序的时候有用（如果程序正确完成，转到哪里执行；如果出错1，转到哪里；出错2，转到哪里，等等等，从高到低的，DOS时代的东西了，不过Linux系统也一样）。 你在命令行下试一下： dir echo  %errorlevel% dir  z:   （没有Z:盘，肯定出错） echo  %errorlevel% 也可以运行你的程序让它以正常或非正常退出，再echo  %errorlevel% 英雄所见略同。[/quote] 都是DOS过来的[/quote]那return语句可不可以去掉？去掉了报错啊

user: user-0
content: 引用 22 楼 zhoujielunzhimi 的回复:main函数是被主线程调用的，main的返回值就是线程的返回值。  我们在写多线程程序的时候，vs的调试输出那里会显示线程的返回值。  这个返回值我们一般都不用。那为什么不能去掉呢？既然用不着

user: user-0
content: 引用 1 楼 worldy 的回复:main中的return是返回给调用进程的，一般调用进程不会使用该值，所以，没什么差别 我用dgb跟踪了一下，return 1；对应的汇编是mov $0x1,%eax。return 0;对应的汇编是mov $0x0,%eax。 就这两个地方不同其他一样，我指的是只是把第一个return 1；换成return 0; 所以说return 可要可不要？

user: user-6
content: main函数是被主线程调用的，main的返回值就是线程的返回值。  我们在写多线程程序的时候，vs的调试输出那里会显示线程的返回值。  这个返回值我们一般都不用。

user: user-7
content: 就是给调用这个函数的函数看的，你需要什么值可以返回什么

user: user-8
content: C:\>if /? 执行批处理程序中的条件处理。  IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command    NOT               指定只有条件为 false 的情况下，Windows 才                     应该执行该命令。    ERRORLEVEL number 如果最后运行的程序返回一个等于或大于                     指定数字的退出编码，指定条件为 true。    string1==string2  如果指定的文字字符串匹配，指定条件为 true。    EXIST filename    如果指定的文件名存在，指定条件为 true。    command           如果符合条件，指定要执行的命令。如果指定的                     条件为 FALSE，命令后可跟一个执行 ELSE                     关键字后的命令的 ELSE 命令。  ELSE 子句必须在 IF 之后出现在同一行上。例如:      IF EXIST filename. (         del filename.     ) ELSE (         echo filename. missing.     )  因为 del 命令需要用一个新行终止，以下子句不会有效:  IF EXIST filename. del filename. ELSE echo filename. missing  由于 ELSE 命令必须与 IF 命令的尾端在同一行上，以下子句也 不会有效:      IF EXIST filename. del filename.     ELSE echo filename. missing  如果都放在同一行上，以下子句有效:      IF EXIST filename. (del filename.) ELSE echo filename. missing  如果命令扩展被启用，IF 会如下改变:      IF [/I] string1 compare-op string2 command     IF CMDEXTVERSION number command     IF DEFINED variable command  其中， compare-op 可以是:      EQU - 等于     NEQ - 不等于     LSS - 小于     LEQ - 小于或等于     GTR - 大于     GEQ - 大于或等于  而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。 /I 开关可以用于 IF 的 string1==string2 的形式上。这些 比较都是通用的；原因是，如果 string1 和 string2 都是 由数字组成的，字符串会被转换成数字，进行数字比较。  CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样，除了它 是在跟与命令扩展有关联的内部版本号比较。第一个版本 是 1。每次对命令扩展有相当大的增强时，版本号会增加一个。 命令扩展被停用时，CMDEXTVERSION 条件不是真的。  如果已定义环境变量，DEFINED 条件的作用跟 EXISTS 的一样， 除了它取得一个环境变量，返回的结果是 true。  如果没有名为 ERRORLEVEL 的环境变量，%ERRORLEVEL% 会扩充为 ERROLEVEL 当前数值的字符串表达式；否则，您会得到 其数值。运行程序后，以下语句说明 ERRORLEVEL 的用法:      goto answer%ERRORLEVEL%     :answer0     echo Program had return code 0     :answer1     echo Program had return code 1  您也可以使用以上的数字比较:      IF %ERRORLEVEL% LEQ 1 goto okay  如果没有名为 CMDCMDLINE 的环境变量，%CMDCMDLINE% 将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始 命令行；否则，您会得到其数值。  如果没有名为 CMDEXTVERSION 的环境变量， %CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的 字串符表达式；否则，您会得到其数值。

user: user-5
content: 引用 18 楼 zhao4zhong1 的回复:[quote=引用 15 楼 u010165006 的回复:] errorlevel，编写批处理程序的时候有用（如果程序正确完成，转到哪里执行；如果出错1，转到哪里；出错2，转到哪里，等等等，从高到低的，DOS时代的东西了，不过Linux系统也一样）。 你在命令行下试一下： dir echo  %errorlevel% dir  z:   （没有Z:盘，肯定出错） echo  %errorlevel% 也可以运行你的程序让它以正常或非正常退出，再echo  %errorlevel% 英雄所见略同。[/quote] 都是DOS过来的

user: user-8
content: 引用 15 楼 u010165006 的回复:errorlevel，编写批处理程序的时候有用（如果程序正确完成，转到哪里执行；如果出错1，转到哪里；出错2，转到哪里，等等等，从高到低的，DOS时代的东西了，不过Linux系统也一样）。 你在命令行下试一下： dir echo  %errorlevel% dir  z:   （没有Z:盘，肯定出错） echo  %errorlevel% 也可以运行你的程序让它以正常或非正常退出，再echo  %errorlevel% 英雄所见略同。

user: user-5
content: 引用 15 楼 u010165006 的回复:errorlevel，编写批处理程序的时候有用（如果程序正确完成，转到哪里执行；如果出错1，转到哪里；出错2，转到哪里，等等等，从高到低的，DOS时代的东西了，不过Linux系统也一样）。 你在命令行下试一下： dir echo  %errorlevel% dir  z:   （没有Z:盘，肯定出错） echo  %errorlevel% 也可以运行你的程序让它以正常或非正常退出，再echo  %errorlevel% DOS下程序是由Command.com调用的，返回值就是给它的，Windows可能是由explorer.exe调用，它就是一个shell，甚至可以用第3方shell代替，谁调用的就返回给谁。

user: user-5
content: errorlevel，编写批处理程序的时候有用（如果程序正确完成，转到哪里执行；如果出错1，转到哪里；出错2，转到哪里，等等等，从高到低的，DOS时代的东西了，不过Linux系统也一样）。 你在命令行下试一下： dir echo  %errorlevel% dir  z:   （没有Z:盘，肯定出错） echo  %errorlevel% 也可以运行你的程序让它以正常或非正常退出，再echo  %errorlevel%

user: user-9
content: main函数的return是返回给系统的，在系统层面，一般0表示exe执行成功，非0表示exe执行失败。

user: user-10
content: 楼主要这么问永远也有解释不清楚的问题。因为越问有些东西越接近操作系统底层了，三言两语根本说不清楚。。。

user: user-11
content: C/C++是静态类型的语言，定义变量就会分配内存，但是，不同类型的变量所占内存不同，如果定义一个任意类型的变量，如何为其分配内存呢？所以，C、C++中没有任意类型的变量。但是，所有指针类型的变量，无论是int*、char*、string*、Student*等等，他们的内存空间都是相同的，所以可以定义“任意类型的指针”即void *。

user: user-0
content: 另外再问一个问题，void类型怎么在内存中分配的，和其他类型有区别么？如果没区别，void a;之类的为什么会报错？求解释下，谢谢，！！