鱼C论坛

 找回密码
 立即注册
查看: 2451|回复: 6

[已解决]main函数的位置

[复制链接]
发表于 2021-3-16 09:02:09 | 显示全部楼层 |阅读模式
9鱼币
main函数只能放在固定位置还是可以放在符合语法的任意位置。如果可以的话能不能举几个例子。ps:百度告诉我可以放在任意位置,但是我不知道怎么放!
最佳答案
2021-3-16 09:02:10
可以放在符合语法的任意位置,我比较喜欢放在最后面,这样可以省去声明函数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <string.h>

  9. size_t lines(const char *filename) {
  10.     struct stat sb;
  11.     if(lstat(filename, &sb) != 0) return 0;
  12.     if(sb.st_size == 0) return 0;

  13.     size_t count = 1;
  14.     int fd = open(filename, O_RDONLY);
  15.     char *buf = malloc(sb.st_size);
  16.     read(fd, buf, sb.st_size);
  17.     for(long i = 0; i < sb.st_size; ++i) {
  18.         if(buf[i] == '\n') ++count;
  19.     }
  20.     free(buf);
  21.     close(fd);
  22.     return count;
  23. }

  24. const char *suffix(const char *filename) {
  25.     return strrchr(filename, '.');
  26. }

  27. size_t count_lines(const char *path) {
  28.     size_t count = 0;
  29.     DIR *dirp = opendir(path);
  30.     if(!dirp) return 0;

  31.     struct dirent *de;
  32.     char *cwd = malloc(PATH_MAX); getcwd(cwd, PATH_MAX); chdir(path);
  33.     while((de = readdir(dirp))) {
  34.         if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
  35.         if(de->d_type == DT_DIR) {
  36.             count += count_lines(de->d_name);
  37.         }
  38.         const char *s = suffix(de->d_name);
  39.         if(!s || strcmp(s, ".c")) continue;
  40.         count += lines(de->d_name);
  41.     }
  42.     chdir(cwd); free(cwd);
  43.     closedir(dirp);
  44.     return count;
  45. }

  46. int main(void) {
  47.     printf("%lu\n", count_lines("../"));
  48.     return 0;
  49. }
复制代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <string.h>

  9. size_t lines(const char *filename);
  10. const char *suffix(const char *filename);
  11. size_t count_lines(const char *path);

  12. int main(void) {
  13.     printf("%lu\n", count_lines("../"));
  14.     return 0;
  15. }

  16. size_t lines(const char *filename) {
  17.     struct stat sb;
  18.     if(lstat(filename, &sb) != 0) return 0;
  19.     if(sb.st_size == 0) return 0;

  20.     size_t count = 1;
  21.     int fd = open(filename, O_RDONLY);
  22.     char *buf = malloc(sb.st_size);
  23.     read(fd, buf, sb.st_size);
  24.     for(long i = 0; i < sb.st_size; ++i) {
  25.         if(buf[i] == '\n') ++count;
  26.     }
  27.     free(buf);
  28.     close(fd);
  29.     return count;
  30. }

  31. const char *suffix(const char *filename) {
  32.     return strrchr(filename, '.');
  33. }

  34. size_t count_lines(const char *path) {
  35.     size_t count = 0;
  36.     DIR *dirp = opendir(path);
  37.     if(!dirp) return 0;

  38.     struct dirent *de;
  39.     char *cwd = malloc(PATH_MAX); getcwd(cwd, PATH_MAX); chdir(path);
  40.     while((de = readdir(dirp))) {
  41.         if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
  42.         if(de->d_type == DT_DIR) {
  43.             count += count_lines(de->d_name);
  44.         }
  45.         const char *s = suffix(de->d_name);
  46.         if(!s || strcmp(s, ".c")) continue;
  47.         count += lines(de->d_name);
  48.     }
  49.     chdir(cwd); free(cwd);
  50.     closedir(dirp);
  51.     return count;
  52. }
复制代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <string.h>

  9. size_t lines(const char *filename) {
  10.     struct stat sb;
  11.     if(lstat(filename, &sb) != 0) return 0;
  12.     if(sb.st_size == 0) return 0;

  13.     size_t count = 1;
  14.     int fd = open(filename, O_RDONLY);
  15.     char *buf = malloc(sb.st_size);
  16.     read(fd, buf, sb.st_size);
  17.     for(long i = 0; i < sb.st_size; ++i) {
  18.         if(buf[i] == '\n') ++count;
  19.     }
  20.     free(buf);
  21.     close(fd);
  22.     return count;
  23. }

  24. const char *suffix(const char *filename);
  25. size_t count_lines(const char *path);

  26. int main(void) {
  27.     printf("%lu\n", count_lines("../"));
  28.     return 0;
  29. }

  30. const char *suffix(const char *filename) {
  31.     return strrchr(filename, '.');
  32. }

  33. size_t count_lines(const char *path) {
  34.     size_t count = 0;
  35.     DIR *dirp = opendir(path);
  36.     if(!dirp) return 0;

  37.     struct dirent *de;
  38.     char *cwd = malloc(PATH_MAX); getcwd(cwd, PATH_MAX); chdir(path);
  39.     while((de = readdir(dirp))) {
  40.         if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
  41.         if(de->d_type == DT_DIR) {
  42.             count += count_lines(de->d_name);
  43.         }
  44.         const char *s = suffix(de->d_name);
  45.         if(!s || strcmp(s, ".c")) continue;
  46.         count += lines(de->d_name);
  47.     }
  48.     chdir(cwd); free(cwd);
  49.     closedir(dirp);
  50.     return count;
  51. }
复制代码

最佳答案

查看完整内容

可以放在符合语法的任意位置,我比较喜欢放在最后面,这样可以省去声明函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-16 09:02:10 | 显示全部楼层    本楼为最佳答案   
可以放在符合语法的任意位置,我比较喜欢放在最后面,这样可以省去声明函数

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <string.h>

  9. size_t lines(const char *filename) {
  10.     struct stat sb;
  11.     if(lstat(filename, &sb) != 0) return 0;
  12.     if(sb.st_size == 0) return 0;

  13.     size_t count = 1;
  14.     int fd = open(filename, O_RDONLY);
  15.     char *buf = malloc(sb.st_size);
  16.     read(fd, buf, sb.st_size);
  17.     for(long i = 0; i < sb.st_size; ++i) {
  18.         if(buf[i] == '\n') ++count;
  19.     }
  20.     free(buf);
  21.     close(fd);
  22.     return count;
  23. }

  24. const char *suffix(const char *filename) {
  25.     return strrchr(filename, '.');
  26. }

  27. size_t count_lines(const char *path) {
  28.     size_t count = 0;
  29.     DIR *dirp = opendir(path);
  30.     if(!dirp) return 0;

  31.     struct dirent *de;
  32.     char *cwd = malloc(PATH_MAX); getcwd(cwd, PATH_MAX); chdir(path);
  33.     while((de = readdir(dirp))) {
  34.         if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
  35.         if(de->d_type == DT_DIR) {
  36.             count += count_lines(de->d_name);
  37.         }
  38.         const char *s = suffix(de->d_name);
  39.         if(!s || strcmp(s, ".c")) continue;
  40.         count += lines(de->d_name);
  41.     }
  42.     chdir(cwd); free(cwd);
  43.     closedir(dirp);
  44.     return count;
  45. }

  46. int main(void) {
  47.     printf("%lu\n", count_lines("../"));
  48.     return 0;
  49. }
复制代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <string.h>

  9. size_t lines(const char *filename);
  10. const char *suffix(const char *filename);
  11. size_t count_lines(const char *path);

  12. int main(void) {
  13.     printf("%lu\n", count_lines("../"));
  14.     return 0;
  15. }

  16. size_t lines(const char *filename) {
  17.     struct stat sb;
  18.     if(lstat(filename, &sb) != 0) return 0;
  19.     if(sb.st_size == 0) return 0;

  20.     size_t count = 1;
  21.     int fd = open(filename, O_RDONLY);
  22.     char *buf = malloc(sb.st_size);
  23.     read(fd, buf, sb.st_size);
  24.     for(long i = 0; i < sb.st_size; ++i) {
  25.         if(buf[i] == '\n') ++count;
  26.     }
  27.     free(buf);
  28.     close(fd);
  29.     return count;
  30. }

  31. const char *suffix(const char *filename) {
  32.     return strrchr(filename, '.');
  33. }

  34. size_t count_lines(const char *path) {
  35.     size_t count = 0;
  36.     DIR *dirp = opendir(path);
  37.     if(!dirp) return 0;

  38.     struct dirent *de;
  39.     char *cwd = malloc(PATH_MAX); getcwd(cwd, PATH_MAX); chdir(path);
  40.     while((de = readdir(dirp))) {
  41.         if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
  42.         if(de->d_type == DT_DIR) {
  43.             count += count_lines(de->d_name);
  44.         }
  45.         const char *s = suffix(de->d_name);
  46.         if(!s || strcmp(s, ".c")) continue;
  47.         count += lines(de->d_name);
  48.     }
  49.     chdir(cwd); free(cwd);
  50.     closedir(dirp);
  51.     return count;
  52. }
复制代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <dirent.h>
  8. #include <string.h>

  9. size_t lines(const char *filename) {
  10.     struct stat sb;
  11.     if(lstat(filename, &sb) != 0) return 0;
  12.     if(sb.st_size == 0) return 0;

  13.     size_t count = 1;
  14.     int fd = open(filename, O_RDONLY);
  15.     char *buf = malloc(sb.st_size);
  16.     read(fd, buf, sb.st_size);
  17.     for(long i = 0; i < sb.st_size; ++i) {
  18.         if(buf[i] == '\n') ++count;
  19.     }
  20.     free(buf);
  21.     close(fd);
  22.     return count;
  23. }

  24. const char *suffix(const char *filename);
  25. size_t count_lines(const char *path);

  26. int main(void) {
  27.     printf("%lu\n", count_lines("../"));
  28.     return 0;
  29. }

  30. const char *suffix(const char *filename) {
  31.     return strrchr(filename, '.');
  32. }

  33. size_t count_lines(const char *path) {
  34.     size_t count = 0;
  35.     DIR *dirp = opendir(path);
  36.     if(!dirp) return 0;

  37.     struct dirent *de;
  38.     char *cwd = malloc(PATH_MAX); getcwd(cwd, PATH_MAX); chdir(path);
  39.     while((de = readdir(dirp))) {
  40.         if(!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
  41.         if(de->d_type == DT_DIR) {
  42.             count += count_lines(de->d_name);
  43.         }
  44.         const char *s = suffix(de->d_name);
  45.         if(!s || strcmp(s, ".c")) continue;
  46.         count += lines(de->d_name);
  47.     }
  48.     chdir(cwd); free(cwd);
  49.     closedir(dirp);
  50.     return count;
  51. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-16 09:23:57 | 显示全部楼层
意思就是你不用把main函数放在程序的第一行,在第任意行都可以
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-16 09:37:57 | 显示全部楼层
chxchxkkk 发表于 2021-3-16 09:23
意思就是你不用把main函数放在程序的第一行,在第任意行都可以

不可以放结尾吗?或者在其他位置吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-16 10:00:00 From FishC Mobile | 显示全部楼层
人造人 发表于 2021-3-16 09:42
可以放在符合语法的任意位置,我比较喜欢放在最后面,这样可以省去声明函数

搭车问一下,您是否用过vscode+gcc
这个组合,我现在在vscode里无法编译
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-16 10:29:21 From FishC Mobile | 显示全部楼层
wp231957 发表于 2021-3-16 10:00
搭车问一下,您是否用过vscode+gcc
这个组合,我现在在vscode里无法编译

什么意思呢?如何无法编辑?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-16 10:40:25 | 显示全部楼层
wp231957 发表于 2021-3-16 10:00
搭车问一下,您是否用过vscode+gcc
这个组合,我现在在vscode里无法编译

之前弄过,详细说明你的问题
qq: 1440332527
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 21:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表