精华内容
下载资源
问答
  • 是编译成bai功的文件,以hello.c为例: 先将源文件编du译成目标zhi文件:gcc - c hello.c。生成hello.o文件,dao再将目标文件编译成可执行文件:gcc -o hello hello.o 这样就生成了可执行文件,在./hello就可以...

    ubuntu16.04实现

    百度答客1:

    是编译成功后的文件,以hello.c为例:
    先将源文件编译成目标zhi文件:

    gcc - c hello.c
    

    这样就生成hello.o文件,再将目标文件编译成可执行文件:

    gcc -o hello hello.o
    

    这样就生成了可执行文件,在./hello就可以运行hello了。

    百度答客2:

    后缀名.o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件,该文件是指源代码经过编译程序产生的且能被cpu直接识别二进制代码。由编译器生成,具体的生成方法在不同的开发环境上是不同的.

    百度百科说:后缀名.o文件是对象文件里面包含的内容就是0,1这样的机器可执行的执令,当你程序要执行时还需要进行链接(link).
    连接程序之后再将这个文件与系统库文件连接就生成可执行文件,也就是把多个.o文件连接成一个可执行文件了。

    展开全文
  • include<stdio_ext.h> 编译后提示错误,『no such file』 这什么
  • 本科时候学过谭浩强的红皮书,那一本语法书,和中学的英文语法书没有太大的区别,规定一系列的约定俗成的规范(复数名词要加s;定义整型变量前面要用int修饰),就是强行记忆,没有什么捷径。语法很重要,学会...

    目前对C语言感性的理解:C语言,就是一门语言,和英语、日语一样。本科时候学过谭浩强的红皮书,那是一本语法书,和中学的英文语法书没有太大的区别,规定一系列的约定俗成的规范(复数名词后要加s;定义整型变量前面要用int修饰),就是强行记忆,没有什么捷径。语法很重要,学会语法是进入这个语系世界的钥匙。但是,学会语法和学会语言是两件事情。我和刘慈欣都熟练掌握中文语法,但是他能写《三体》获得雨果奖,而我写个开题报告都要被导师骂一顿(苦笑)。语言能力的高低,最终还是体现在思维的深度和广度,语法不过是一种人机的通讯协议。自知能力有限,不敢谈C语言,只是总结一些C语言语法和原理以供日后复习。

    C语言编译过程
    在Linux环境下,我们编译一个.c文件一般直接使用gcc编译器执行“gcc 文件名.c” 就可以获取二进制可执行文件a.out,其实编译器帮我们完成了很多任务。以编译unicorn.c文件为例,gcc编译器实际编译生成二进制可执行文件的过程如下:
    1)gcc -E unicorn.c -o unicorn.i
    //编译器执行与处理指令
    2)gcc -S unicorn.i -o unicorn.s
    //编译器对预处理文件进行编译,生成汇编文件
    3)gcc -c unicorn.s -o unicorn.o
    //编译器对汇编文件进行汇编,生成二进制文件
    //通常第二、三步可统一为一步称为编译
    4)gcc unicorn.o -o unicorn
    //编译器将二进制文件与其依赖进行链接,并与运行时文件绑定,生成可执行的二进制文件

    举例:以一个简单计算程序为例,看看每一步编译器的具体工作
    代码:

    myMath.h:

      1 # ifndef __MYMATH_H__
      2 # define __MYMATH_H__
      3 int add(int i, int j);
      4 double div(int i, int j);
      5 int sub(int i, int j);
      6 int mul(int i,int j)7 # endif            
    

    myMath.c:

    1 # include "myMath.h"                        
    2
    3 int add(int i, int j){
    4     return i + j;
    5 }
    6 
    7 int mul(int i, int j){
    8     return i * j;
    9 }
    10 
    11 int sub(int i, int j){
    12     return i - j;
    13 }
    14 
    15 double div(int i, int j){
    16     return i / j;
    17 }
    

    myMain.c:

    1 #include <stdio.h>
    2 #include "myMath.h
    3
    4 int main()
    5 {
    6      int i = 10;
    7      int j = 3;
    8      printf(" i + j = %d\n",add(i, j));
    9      printf(" i - j = %d\n",sub(i, j));
    10     printf(" i * j = %d\n",mul(i, j));
    11     printf(" i / j = %d\n",div(i, j));
    12     return 0;
    13 }
    

    执行gcc -E myMain. -o myMain.i,并打开myMain.i:

    539 
    540 int add(int i, int j)541 double div(int i, int j);
    542 int sub(int i, int j);
    543 int mul(int i,int j);
    544 # 3 "myMain.c" 2
    545 
    546 int main()
    547 {
    548     int i = 10;
    549     int j = 3;
    550     printf(" i + j = %d\n",add(i, j));
    551     printf(" i - j = %d\n",sub(i, j));
    552     printf(" i * j = %d\n",mul(i, j));
    553     printf(" i / j = %lf\n",div(i, j));
    554     return 0;
    555 }  
    

    与myMain.c对比,经过预处理后,原本include包含的头文件名,被实际头文件内容代替

    执行gcc -S myMain.i -o myMain.s,并打开myMain.s:

      1     .section    __TEXT,__text,regular,pure_instructions                                                                                                                          
      2     .build_version macos, 10, 14    sdk_version 10, 14
      3     .globl  _main                   ## -- Begin function main
      4     .p2align    4, 0x90
      5 _main:                                  ## @main
      6     .cfi_startproc
      7 ## %bb.0:
      8     pushq   %rbp
      9     .cfi_def_cfa_offset 16
     10     .cfi_offset %rbp, -16
     11     movq    %rsp, %rbp
     12     .cfi_def_cfa_register %rbp
     13     subq    $32, %rsp
     14     movl    $0, -4(%rbp)
     15     movl    $10, -8(%rbp)
     16     movl    $3, -12(%rbp)
     17     movl    -8(%rbp), %edi
    

    预处理文件myMain.i经过编译生成汇编文件

    执行gcc -c myMain.s -o myMain.o
    再执行ls -l myMain.o:

    Desktop Linraffe$ ls -l myMain.o
    -rw-r--r--  1 Linraffe  staff  1100  2 29 17:15 myMain.o
    

    发现经过编译起汇编后,生成的二进制文件并不能执行。

    执行gcc -c myMain.o myMath.o -o myMain,
    在执行myMain:

    Desktop Linraffe$ gcc myMath.o myMain.o -o myMain
    Desktop Linraffe$ myMain
     i + j = 13
     i - j = 7
     i * j = 30
     i / j = 3
    

    经过链接后,生成的可执行文件成功执行。

    对于链接过程的理解,可以执行nm命令:

    Desktop Linraffe$ nm myMain.o
                     U _add
                     U _div
    0000000000000000 T _main
                     U _mul
                     U _printf
                     U _sub
    Desktop Linraffe$ nm myMath.o
    0000000000000000 T _add
    0000000000000060 T _div
    0000000000000020 T _mul
    0000000000000040 T _sub
    Desktop Linraffe$ nm myMain
    0000000100000000 T __mh_execute_header
    0000000100000e40 T _add
    0000000100000ea0 T _div
    0000000100000ec0 T _main
    0000000100000e60 T _mul
                     U _printf
    0000000100000e80 T _sub
                     U dyld_stub_binder
    

    nm命令+“二进制文件名”:查看该程序实现所依赖的函数
    其中,T代表文件中包含函数的实现,U代表文件依赖但是不包含函数的实现。可以看到,myMain.o中并不包含几个函数(add()、su b()…)的实现,而经过链接后,myMain中包含这些函数的实现,从而可以执行。


    总结:一个.c文件要经过预处理、编译、汇编、链接,最终才会生成一个可执行的二进制文件。

    展开全文
  • 简单编译后出现这样的警告是什么原因呢?求大神指导哦 错误 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_...

    最近安装了visual  2013.简单编译后出现这样的警告是什么原因呢?求大神指导哦

    错误 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\我的文档\documents\visual studio 2013\projects\project1\project1\源.cpp 6 1 Project1

    展开全文
  • 像uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};和uchar ds1302[]={0xfe,0xfd,0...C在定义数组时占用内存空间的,而code编码的意思,在定义编码时直接分配到程序空间的,编译后编码占用的事...

     


    uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

    uchar ds1302[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    都能运行,两者有什么区别
     
    C在定义数组时是占用内存空间的,而code是编码的意思,在定义编码时是直接分配到程序空间的,编译后编码占用的事程序存储空间而非内存空间。
      在有些时候,定义的数组中包含的元素比较多的时候,数组的所占的存储空间就会大一些,而不希望其影响内存,而把它安排到编码空间,一定程度上可以节省内存。
    keil中的code表示定义的变量存储在程序存储器中,这种变量是只读的,不可写,作用主要是节约RAM的使用,嵌入式系统的资源是有限的。

    若函数的形式参数是指针类型,则实参可以是指针或什么?

     

    比如形参是char*,函数是void f(char* a) 实参可以是指针 char* p; f(p); 也可以是地址 char c; f(&c); 
    也可以是数组名 char m[10]; f(m); 也可以是字符串 f("Hello world!"); 实际上 指针,是指针变量 地址,是指针常量 数组名,是指针常量 字...

     



    转载于:https://www.cnblogs.com/321waiting/p/9334119.html

    展开全文
  • C语言 变量赋值后编译运行,再删除赋值后编译运行,为什么变量的值会变 #include int main() { int a,b; printf("a=%d b=%d",a,b); return 0; } 输出a=36 b=8 我明白这内存中原有的值,下面...
  • 我们平时所说的程序,指双击就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe 和 .com(其中 .exe 比较常见);在类 UNIX 系统(Linux、Mac ...
  • C语言编译连接

    2018-11-29 16:53:26
    当我们将代码写到编译器上,每次都是编译运行一下,来查看自己代码的结果。 而今天要说的就是编译这个环节,编译器到底替我们完成了什么样的一个操作。 我们经常口中说的编译可以分为这么四个阶段:预处理、编译...
  • (1)C语言是面向过程、编译型的编程语言(与C++、Java等面向对象的编程语言有所不同,ps:C与C++兼容的),经过编译后最终形成可执行程序(即exe,可直接运行)。 (2)C语言非常经典,一般会在底层开发使用,...
  • 许多小伙伴在学完C语言后想入门单片机,但学着学着发现明明都是C语言,为什么单片机C语言和我当初学的C语言有差异呢?今天小编就来梳理我们平时所学的C语言与单片机C语言的有什么样的不同。 C语言C语言是...
  • 把作业中代码直接复制到了Dev C++中,正确答案应该共写了101行代码,可是我现实0行。。。</p>
  • 打开这个选项,去工程下找相应的.i文件,就能看见宏展开到底什么了:) 在将一个C源程序转换为可执行程序的过程中, 编译预处理最初的步骤. 这一步骤由预处理器(preprocessor)来完成的. 在源流程序被...
  • C语言里使用case要注意的问题 一般情况要加上break; case后面必须为整型数字或者字符类型;...你说的“不能通过编译”,可能下面这个原因。C/C++里规定,不能在case语句里定义局部变量。例如: int a = 2; sw...
  • 因为 C语言是可以移植的,所以它在许多环境中可用,其中包括 UNIX,Linux,Windows等等 。不过,让我们首先来看一看许多环境所共有的一些方面。你完全不必知道运行一个 C 程序后面的事情,但了解一点一个很好的...
  • C语言的注释符一般分为两种,一种以“/*”开头,在中间加上注释内容,并以“*/”结尾的段落注释符。在“/*”和“*/”之间的即为注释。另一种以“//”开头,后面加注释内容的单行注释符。在“//”之后的即为注释...
  • 本次的内容主要通过c语言实现简单的词法分析器,所以理论方面的知识较少,在大家有了编译原理的基础知识,提供代码学习。 使用语言:C语言 编译环境:vscode 什么是词法分析器 设计词法分析器 c语言代码...
  • c语言是什么意思

    千次阅读 2008-10-20 09:34:00
    建议你再看下书 在编译运行就输出什么东西 i); printf(“x2=%8.4f-%8.4fi/n”r x2); } else {r=-b/(2*a); i =sqrt(-d)/(2*a); printf(“x1=%8.4f+%8.4fi/n”r x1 x2=%8.4f/n” 方程有两个实根 要解释这个问题实在...
  • PythonC语言实现,C语言是编译型语言,经过编译后生成机器码再运行,执行速度快不能跨平台,一般用于操作系统驱动等底层开发。Python理解为解释型语言执行速度慢,由于Python虚拟机可以跨平台,Python高度集成...
  • 1、条件编译 C语言中,预处理过程读入...#后是指令关键字,在#和指令关键字之间允许存在若干空白字符。 C/ C++中宏定义是什么?有什么作用呢? 使用宏进行条件编译的用法与使用宏防止多重引用类似。示例如下: ...
  • 编译原理 C语言实现词法分析

    热门讨论 2011-05-14 00:48:46
    显然,只有知道下一个字符是什么才能下结论。于是分析器读入下一个字符’+’,这时可知应将’>’解释为大于运算符。但此时,超前读了一个字符’+’,所以要回退一个字符,词法分析器才能正常运行。在分析标识符,无...
  • 什么是c语言中的目标文件

    千次阅读 2015-07-24 15:31:00
    c语言编译分成编译和 链接两个阶段。 在编译阶段,经过预处理,对宏定义指令进行替换,对条件编译指令进行处理,对#include指令里面的头文件进行添加,  然后将其翻译成汇编代码,同时对代码进行优化, ...
  • 用的devc++,明明有3个scanf,但是只能输入两个 ,这什么? ![图片说明](https://img-ask.csdn.net/upload/201908/09/1565345482_957943.jpg)![图片说明]...
  • 因为 C语言是可以移植的,所以它在许多环境中可用,其中包括 UNIX,Linux,Windows等等 。 不过,让我们首先来看一看许多环境所共有的一些方面。你完全不必知道运行一个 C 程序后面的事情,但了解一点一个很好的...
  • 手机排版不佳请谅解~更新2:还是关于编译和解释二者的本质区别编译/解释器的总体工作方式上的,编译器off-line,解释器on-line。编译器把整个程序读进来,进行一系列变大变小转化优化的过程,产生可执行文件...
  • 编译器 编译器“文章的译者”,它在我们完成创作将其翻译(实际上是编译)成为机器语言。 2.解释器 解释器“随声翻译”,代码运行的同时它们就开始工作,BASIC就是使用解释器,一般认为这种方法效率很低。 ...
  • c语言和python的区别:1、Python一种面向对象的解释型语言,通过缩进来表示语句体,在Python中每一条语句结尾没有分号;2、C一种面向过程的编译型语言,通过"{}”来表示语句体,C语言中每一条语句需以...
  • 编译后生成可执shu行文件,可以在执行的程序后加参数,比如编译一个程序为test.exe,则在执行时可以输入: test.exe 1 firestone 在这里,argc等于3,argv[0]为"test.exe",argv[1]为"1",argv[2]为"firestone"。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 712
精华内容 284
关键字:

c语言编译后是什么

c语言 订阅