-----------------------------------------------------------------------------------------

【开始】

1. 在Mac和Linux上写C语言之前,首先要看看是否安装了编译器:

  在终端下输入gcc后回车进行检测,如果安装过,将提示 clang: error: no input files(没有输入文件);

  如果没有安装,在Mac下根据提示安装Xcode即可,或者Install gcc without xcode in maxOsX:http://osxdaily.com/2012/07/06/install-gcc-without-xcode-in-mac-os-x/  ( OSX命令行工具下载:https://developer.apple.com/downloads/ )

在CentOS下直接yum -y install gcc gcc-c++(-y表示将自动选择y)

2. 现在开始愉快的写代码:

  在Xcode里对新建的项目文件使用command+R就直接编译运行你的c代码了。

  在Mac终端下,使用神器vim,如:vim test.c ,它不会帮你新建test.c,写完c代码后你需要command+s保存,然后:wq!退出,使用命令gcc test.c编译,不指定编译后的文件名,编译文件名都将是a.out ,运行它使用./a.out

  在Linux下,同样使用vim,输入vim test.c 的时候就在当前目录新建了test.c文件,写完c代码直接:wq!保存退出,使用gcc test.c编译,运行编译文件./a.out   ( gcc -o main.c main.o #生成.o文件 )

  Sublime Text是一款值得使用的文本编辑器,如果装好环境,使用cmd+B对代码进行编译,shift+cmd+B运行,但是Sublime只能运行一个程序,如果需要运行有输入的程序,就必须离开Sublime进入到终端。

  

  Windows环境下C/C++集成开发环境(IDE)推荐Dev-C++,这里不作过多介绍,下载地址在这里:http://sourceforge.net/projects/orwelldevcpp/?source=directory。

3. DEMO:

#include "stdio.h"
/*
标准输入流:键盘输入
标准输出流:终端输出
标准错误流:错误输出
stdin
stdout
stderr
*/
int main()
{
  printf("nihao,shijie! \n"); //nihao, shijie
  //内部实现:fprintf(stdout, "输入一个数:");   int a;
  scanf("%d", &a);
  //内部实现:fscanf(stdin, "%d", &a);   if(a < 0) {
    fprintf(stderr, "be sure: a > 0\n");
    return 1;
  } else {
    printf("a > 0\n");
  }
  return ;
}
重定向:

./main.out >> m.txt     #执行文件输出结果追加写入到m.txt
./main.out > m.txt     #执行文件输出结果覆盖写入到m.txt
./main.out < input.txt #输入流重定向,input.txt作为输入流
./main.out >t.txt >f.txt < input.txt  #输出流写入t.txt, 错误流写入f.txt, 输入流使用input.txt
管道:

ls /usr/local/ | grep bin
ps -e | grep ssh    #将前一条命令的输出流作为后面命令的输入流

附:

【C语言编译过程】

假如要编译一个 1.c 程序为可执行文件 build,如何看到编译器的处理过程呢,使用 gcc -v -o build 1.c

1. 预处理

cpp -o 1.i 1.c  # 翻译成.i文件

gcc -E

2. 编译,系统用的是cc1

/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -o build 1.c

我们可以直接用 gcc -S , 相当于帮我们执行上面的过程;

3. 汇编,系统用的是as

as -o build 1.c

我们可以直接用 gcc -c ,因为系统没有办法直接把c程序转为汇编,所以相当于依次执行了编译和汇编;

4. 链接,系统用的是collect2

/usr/lib/gcc/x86_64-linux-gnu/4.8/collect2 -o build 1.c

我们可以直接用 gcc -o ,同理,系统帮我们依次执行了编译、汇编、链接。

示例:

gcc -E -o 1.i 1.c  # 生成预处理文件1.i,将其中的include和define等替换成其它

gcc -S -o 1.s 1.c  # 编译成1.s 汇编码文件,-o选项不能省,只是增加了-S选项

gcc -c -o 1.o 1.c  # 编译成1.o 二进制码文件,给机器读

由于include和define是预处理阶段完成的替换,所以它们并不是关键字,关键字是编译器处理的。

( 条件预处理 )

  gcc -DABC  相当于 #define ABC , 用于调试中。

  

  示例:

include <stdio.h>

int main()
{
#ifdef ABC
printf("%s", __FILE__);
#endif printf("hello"); return ;
}

编译时,gcc -DABC -o build 1.c ,-D选项后面直接加常量名,预处理会加入宏定义。

不用命令行定义 ARRAY_SIZE 时,值为3:

#include <stdio.h>

int main()
{
#ifndef ARRAY_SIZE
#define ARRAY_SIZE 3
#endif int array[ARRAY_SIZE] = {}; printf("ARRAY_SIZE is %d\n", ARRAY_SIZE);
perror("error msg"); return ;
}

gcc -o build 1.c -DARRAY_SIZE=2

( 宏展开下的#, ## )

  #  字符串化

  ##  连接符号

  #define ABC(x) #x      // 宏体相当于字符串x,在宏中想赋值字符串的时候使用

  #define ABC(x) day##x   // 宏体相当于day连接x后的内容

  示例:

include <stdio.h>

#define FUNC(x) #x
#define PAR(x) myparam##x int main()
{
int myparam1 = ;
int myparam2 = ; printf(FUNC(abc\n)); // 输出abc\n printf(PAR()); // 输出10 printf(PAR()); // 输出20 return ;
}

  例2:内核中用例,传入不同的后缀可以得到不同的值

#define ADM8211_SRAM(x) (priv->pdev->revision < ADM8211_REV_DB ? \
    ADM8211_SRAM_A_ ## x : ADM8211_SRAM_B_ ## x) #define ADM8211_SRAM_INDIV_KEY   0x0000
#define ADM8211_SRAM_A_SHARE_KEY  0x0160
#define ADM8211_SRAM_B_SHARE_KEY  0x00c0 #define ADM8211_SRAM_A_SSID     0x0180
#define ADM8211_SRAM_B_SSID     0x00d4

Linux 下我们用man可以看到完整的手册,如果想看一些常用选项,建议你用 `gcc --help`:

Link: http://www.cnblogs.com/farwish/p/4162182.html

[C语言]在命令行编译执行程序的更多相关文章

  1. VS2010命令行编译C#和VC项目

    VS2010命令行编译C#和VC项目 VS2010命令行编译C#和VC项目 根据需要动态创建数据库字段后,需要动态创建或者调整页面,那就需要编译这些页面和后台文件.因此使用命令行编译将会非常方便,对于 ...

  2. 终端命令行编译运行C#程序HelloWorld

    终端命令行编译运行C#程序HelloWorld 今天忽然有人问我,刚学习java程序的时候,一般老师都会建议我们从配置环境变量开始从命令行编译运行程序,那么学习c#的时候基本是直接安装visual s ...

  3. 【linux基础】使用命令行编译运行c++程序

    前言 在linux系统运行程序,小鹅知道的有3种编译方式,一种是直接命令行编译,一种是使用Cmake,一种是使用脚本文件(*.sh).本文介绍的是使用命令行编译. 使用过程 注意不同系统的编译器版本可 ...

  4. Python unittest第一篇:基础入门+命令行编译

    unittest单元测试框架最初受JUnit启发,与其他语言的主要单元测试框架具有相似的风格. 它支持测试自动化,支持开启或关闭某个测试,支持结合测试.另外它可以生成各个单元测试的报告.为了实现以上功 ...

  5. Java 命令行编译项目

    如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...

  6. 命令行编译带外部包依赖的java源文件 [以JDBC MySQL8为例]

    环境: MySQL8 JDK11(SE) 首先下载MySQL8的JDBC驱动 https://dev.mysql.com/downloads/connector/j/选 PlatForm Indepe ...

  7. 如何用命令行编译c++程序

    作为程序员,如果仅仅只懂得如何在IDE上拖控件写程序,而不知道如何直接通过编译器编译程序的话.虽然说也没啥大不了的,但是如果掌握了手动编译的技能,那肯定会是一种炫技般的存在.从客观的角度来讲,一方面, ...

  8. 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏

    也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

  9. 用命令行编译java并生成可执行的jar包

    用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: ...

随机推荐

  1. 11 vim文本编辑器

    和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上.而vim.vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vi ...

  2. Spark2.X集群运行模式

    rn 启动 先把这三个文件的名字改一下 配置slaves 配置spark-env.sh export JAVA_HOME=/opt/modules/jdk1..0_60 export SCALA_HO ...

  3. How The Kernel Manages Your Memory.内核是如何管理内存的

    原文标题:How The Kernel Manages Your Memory 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩 ...

  4. win10图片打开方式里没有默认照片查看器的解决方法

    今天安装好win10后发现打开图片的默认程序是win10自带的画图工具,非常不方便,并且右键选择打开方式里边也找不到默认的“照片查看器”.百度搜索了一下关于win10打开方式恢复默认照片查看器的方法, ...

  5. Celery 在Windows下启动worker时出现错误:ValueError: not enough values to unpack (expected 3, got 0)

    在公司Linux环境下没有出现问题,在回到家后直接在Windows10下运行出现错误: ValueError: not enough values to unpack (expected 3, got ...

  6. Tomcat内存优化

    一.Tomcat内存优化 T omcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS参数. 1.JAVA_OP ...

  7. BZOJ2321 [BeiJing2011集训] 星器

    2321: [BeiJing2011集训]星器 Time Limit: 1 Sec  Memory Limit: 128 MB Description Magic Land上的时间又过了若干世纪…… ...

  8. ubantu 黑屏

    解决:ubuntu16.04启动时长时间停留在紫屏或跳文本的黑屏界面 - HuangJC 显卡驱动问题,显卡驱动问题,显卡驱动问题.重要的事说三遍.(也许还有其他问题) 解决办法: 1.在引导界面按E ...

  9. nginx安装以及常用配置

    nginx的源码安装 0 安装相关软件:yum -y install pcre-devel zlib-devel openssl-devel 1 下载 nginx-1.14.0.tar.gz 2 安装 ...

  10. Object-c基本语法

    // //  main.m //  OCbasic1 // //  Created by apple on 14-8-5. //  Copyright (c) 2014年 苹果IOS软件开发者. Al ...