1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# 参考php大牛老陈^^的博客:https://wp.iter-cc.com/?p=848 # windows编译 # 下载MinGW:http://sourceforge.net/projects/mingw/ # 下载下来后,双击安装(在线安装,必须联网) # 设置环境变量 我的电脑->属性->高级->环境变量 # path = D:\MinGW\bin LIBRARY_PATH = D:\MinGW\lib C_INCLUDEDE_PATH = D:\MinGW\include # cmd中输入 gcc -v 或 g++ -v 查看安装是否成功 # sublime text 3中有默认的编译器配置,设置好环境变量后按ctrl + b能快捷编译 ctrl+shift+b 能选择编译并运行 # 安装 ConvertToUTF8 插件,设置 default_encoding_on_create="gbk"可以默认新建和保存为GBK编码 # 在windows环境下编译(代码中包含中文,使用gbk编码) 切记:php编码时改回为UTF-8 default_encoding_on_create="" # linux编译及简单demo // main.c 简单输出及argc argv参数 #include <stdio.h> int main(int argc, char const *argv[]) { printf("%s\n", "hello world"); printf("%d\n", argc); int i; for (i = 0; i < argc; ++i) { printf("%s\n", argv[i]); } return 0; } # gcc main.c会编译生成a.out(默认) 可以通过-o指定编译文件名 如:gcc main.c -o main.out # 执行a.out argv1输出如下 [root@BestLove c]# ./a.out argv1 hello world 2 ./a.out argv1 // main.c 多文件编译 #include <stdio.h> int main(int argc, char const *argv[]) { int maxNum; maxNum = max(13, 14); printf("%d\n", maxNum); return 0; } // max.c int max(int num1, int num2) { if (num1 > num2) { return num1; } else { return num2; } } # 此时直接gcc main.c会报错 可以执行gcc main.c max.c进行编译 # 以上方法在老版本编译器中会出错 # 或者在 main.c文件第2行增加导入 #include "max.c" 执行gcc main.c # 以上方法只是将max.c的内容复制到main.c中,文件多的话编译会很慢 # 或者执行gcc -c max.c生成max.o文件 再执行 gcc main.c max.o // max.h int max(int num1, int num2); # 但是对于一些第三方的类或框架,我们只有编译后的文件,没有源码,不知道函数参数、返回值等 # 此时,可以在main.c文件第2行引入.h头文件 #include "max.h" 再执行gcc main.c max.o # 编译大型项目时,可编写Makefile文件(缩进必须为tab不能用空格替代,否则会报错) main.out:max.o main.c gcc max.o main.c -o main.out max.o:max.c gcc -c max.c # 执行 make 编译成功 // main.c 接收输入值 #include <stdio.h> int main(int argc, char const *argv[]) { int num; printf("请输入你的年龄:"); // 默认接收键盘输入 scanf("%d", &num); if (num > 100) { fprintf(stderr, "%s\n", "别乱输。。"); return 1; } //printf底层调用的就是fprintf传入stdout fprintf(stdout, "%s\n", "ok"); return 0; } # gcc main.c -o scanf.out后 执行./scanf.out < input.data 1>out.log 2>err.log 会改变原来的键盘输入,屏幕输出为input.data文件输入,重定向文件输出 // main.c 写文件 #include <stdio.h> int main(int argc, char const *argv[]) { FILE *outFp = fopen("./output.log", "w+"); FILE *errFp = fopen("./error.log", "w+"); int num; printf("请输入你的年龄:"); scanf("%d", &num); if (num > 100) { fprintf(errFp, "%s\n", "别乱输。。"); fclose(outFp); fclose(errFp); return 1; } fprintf(outFp, "%s\n", "ok"); fclose(outFp); fclose(errFp); return 0; } |