在C语言中,结束程序代码有多种方式,以下是一些常见的方法:
1、正常退出:当程序执行到main函数的末尾时,程序会自动结束,这是最常见的结束程序的方式。
#include <stdio.h> int main() { printf("Hello, World! "); return 0; }
在这个例子中,当程序执行到return 0;
这一行时,main函数结束,程序也结束了。return 0;
表示程序正常退出。
2、使用exit函数:C语言提供了一个名为exit
的函数,可以用来提前结束程序,这个函数需要包含stdlib.h
头文件。
#include <stdio.h> #include <stdlib.h> int main() { printf("Hello, World! "); exit(0); }
在这个例子中,当程序执行到exit(0);
这一行时,程序会立即结束。exit(0);
表示程序正常退出,注意,exit
函数会终止进程,所以调用它后,程序将无法继续执行后面的代码。
3、使用信号:C语言还提供了一种通过信号来结束程序的方法,这种方法通常用于处理异常情况。
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> void signal_handler(int signum) { printf("Received signal %d, exiting... ", signum); exit(signum); } int main() { signal(SIGINT, signal_handler); // 注册信号处理函数 while (1) { printf("Running... "); sleep(1); // 模拟程序运行 } return 0; }
在这个例子中,我们注册了一个信号处理函数signal_handler
,当程序收到SIGINT
信号(通常是用户按下Ctrl+C)时,会调用这个函数,在这个函数中,我们调用了exit
函数来结束程序,注意,这种方法只适用于Unix和类Unix系统,因为Windows系统不支持信号。
4、使用kill函数:除了信号,C语言还提供了一个名为kill
的函数,可以用来结束其他进程。
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include <dirent.h> #include <time.h> #include <pwd.h> #include <grp.h> #include <sys/resource.h> #include <sys/utsname.h> #include <sys/times.h> #include <sys/timeb.h> #include <sys/wait.h> #include <sys/mount.h> #include <sys/statvfs.h> #include <sys/mman.h> #include <sys/shm.h> #include <sys/msg.h> #include <sys/sem.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <syslog.h> #include <sys/un.h> #include <termios.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/select.h> #include <sys/poll.h> #include <sys/stropts_npcompat.h> #include <sys/stream.h> #include <sys/stropts_rft.h> #include <sys/utsname.h> #include <sys/uio.h> #include <sys/vfs.h> #include <sys/xattr.h> #include <sys/capability.h> // for cap_getuid and cap_setuid functions in Linux kernel >= 2.26 and glibc >= 2.27 (see also setuid(2)) and related system calls like setresuid(2), getresuid(2), setreuid(2), getreuid(2), setuid(2), getuid(2), etc... (see also capabilities(7)) #define _GNU_SOURCE // for __USE_GNU #define __USE_GNU #define __USE_POSIX199309 // for sysconf(_SC_XOPEN_SOURCE) == 1 #define __USE_XOPEN2K8 #define __USE_XOPEN_EXTENDED #define __USE_UNIX98 #define __USE_ISOC99 // for std::complex<double>(double) #define __USE_STDLIB_IOSTREAM #define __USE_LARGEFILE64 #define __USE_FILE_OFFSET64 #define __USE_FORTIFY_LEVEL0 #define __USE_BSD__ // for sysconf(_SC_HOST_NAME) and sysconf(_SC_PATH_MAX) #define __USE_MISC #define __USE_ATTRIBUTE #define __USE_VISIBILITY #define __USE_GNU #define __USE_XOPEN2K8 #define __USE_XOPEN_EXTENDED #define __USE_UNIX98 #define __USE_ISOC99 #define __USE_STDLIB_IOSTREAM #define __USE_LARGEFILE64 #define __USE_FILE_OFFSET64 #define __USE_FORTIFLYEVAL #define __USE_FEATURES_TSEARCH #define __USE_MATH_TR1 #define __USE_THREADS #define __USE_REENTRANT // for pthreads (see also pthreads(7)) #define __USE_POSIX199309 // for sysconf(_SC_XOPEN_SOURCE) == 1 #define __USE_XOPEN2K8 #define __USE_XOPEN_EXTENDED #define __USE_UNIX98 #define __USE_ISOC99 // for std::complex<double>(double) #define __USE_STDLIB_IOSTREAM #define __USE_LARGEFILE64 #define __USE_FILE_OFFSET64 #define __USE_FORTIFY_LEVEL0 #define __USE_BSD__ // for sysconf(_SC_HOST_NAME) and sysconf(_SC_PATH_MAX) #define __USE_MISC #define __USE_ATTRIBUTE #define __USING__ // for using namespace std with std=c++11 or std=gnu++11 or std=c++0x or std=gnu++0x or std=c++14 or std=gnu++14 or std=c++17 or std=gnu++17 or std=c++2a or std=gnu++2a or std=c++2b or std=gnu++2b or std=c++23 or std=gnu++23 or std=c++1z or std=gnu++1z or std=c++17 or std=gnu++17 or std:any or std=gnu++98 or std=gnu++11 or std=gnu++0x or std=gnu++14 or std=gnu++17 or std=gnu++2a or std=gnu++2b orstd:any or Wnodeprecateddeclarations // for using auto keyword with C++ compiler that does not support it yet (e.g. GCC <= 4.8) // see also https://gcc.gnu.org/onlinedocs/gcc4.8.2/gcc/CImplementationStandards.html and https://stackoverflow.com/questions/35556753/howtouseautokeywordwitholderversionsofgcc and https://stackoverflow.com/questions/35556753/howtouseautokeywordwitholderversionsofgcc and https://stackoverflow.com/questions/355
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/376877.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复