O processo de compilação e o tipo de dados (a)
Diretório do artigo
- O processo de compilação e o tipo de dados (a)
1. g ++ compilação processo
1.1 Pré-tratamento
-
arquivos gerados: xxx.c gerado pelo xxx.i (fonte) (arquivo pré-processado).
-
Ferramentas: pré-processador (compilador GCC incluído no conjunto de ferramentas).
-
Gerando o comando: gcc -E xxx.c -o xxx.i pré-processamento de parâmetros é que -E
-
papel:
-
Expandir o arquivo de cabeçalho
- Expandir stdio.h, arquivos de cabeçalho stdlib.h e outros conteúdos, e o conteúdo específico e expandir juntos outra fonte, é armazenado no arquivo xxx.i. (#Include <stdio.h> Estes comandos pré-tratamento pré-tratamento não existe na xxx.i arquivo, ele foi substituído por um conteúdo específico)
- Este processo não é responsável por verificar o erro de sintaxe, um erro de sintaxe está no processo de compilação. Então, se o primeiro documento escrito qualquer coisa pode ser, não importa qual o formato do sufixo arquivo de cabeçalho pode ser, e pode ser implantado em outra fonte de xxx.i.
Você pode testar: Escreva um nome para o arquivo de cabeçalho 111.txt, basta escrever o que está dentro. Escreva um nome de arquivo para o text.c fonte, em que o cabeçalho usando 111.txt, a saber: #include <111.txt>. Os arquivos de inclusão e de código em um diretório e, em seguida, executar gcc -E text.c -o text.i -I. Este comando pode ser visto no arquivo text.i gerado, esse arquivo de cabeçalho de gravação aleatória , também foi lançado e os outros códigos restantes juntos de qualquer maneira. (Este último comando adiciona a == - I ==, respectivamente, traços letras maiúsculas i, períodos, o papel é um cabeçalho arquivos fonte usados no mesmo diretório, caso contrário, sem este -I .. se você não pode encontrar os arquivos).
-
Substituir definição de macro
- Irá substituir o valor do nome macro macro.
- Tais como: o arquivo de origem tem
#define PI 3.14
, e usa os códigos PI abaixo, em seguida, transformados em um arquivo que o pré-tratamento xxx.i,#define PI 3.14
desaparecem simultaneamente, todos os códigos da mais baixos tornaram-se PI 3,14.
-
Substitua comentários
- De linha única, comentário multi-linha será substituída por uma linha em branco na xxx.i.
-
Expanda a compilação condicional
- As condições para expandir o código.
- Tais como: a presença de código a seguir,
#ifdef PI
o Código é uma condição, se você definir PI, vai colocar o códigoprintf("PI has been defined.");
em xxx.i que, ao mesmo tempo#ifdef PI
e#endif
desaparecer. Se você não definir PI antes de então#ifdef PI
eprintf("PI has been defined.");
, e#endif
esta peça não serão mais exibidos xxx.i.
#include<stdio.h> #define PI 3.14 int main(void) { #ifdef PI printf("PI has been defined."); #endif return 0; }
-
1,2 compilador
- arquivos gerados: xxx.s (geradores de arquivo compilado) por um xxx.i (arquivo pré-processado).
- Ferramentas: Compiler (compilador GCC incluído no conjunto de ferramentas).
- Gerando comando: gcc -S xxx.i -o xxx.s que é compilada parâmetro -S
- papel:
- erros progressiva sintaxe verificação, que está entre o compilador gcc quatro passos o mais importante e demorada.
- O programa C traduzidos em instruções de montagem, obter .S arquivos de montagem.
1.3 Compilação
- O ficheiro resultante: gerado por xxx.s (conjunto de arquivo) xxx.o (o ficheiro de destino). arquivos objeto são linguagem de máquina binária, os seres humanos não podem ler. (Note, porém, é um arquivo binário, mas não aberto após estes 101010, 101010 porque vemos é uma série de cordas, não reconhecida pelo computador 101010).
- Ferramentas: Assembler (compilador GCC incluído no conjunto de ferramentas).
- Gerando comando: gcc -c xxx.s -o xxx.o em que o parâmetro é uma -c compilação
- papel:
- Tradução: As instruções assembler traduzido num correspondentes instruções binárias.
1.4 Ligações
- arquivos gerados: gerar xxx.exe (arquivo executável) pela xxx.o (o arquivo de destino). ficheiros executáveis são linguagem de máquina binária, os seres humanos não podem ler.
- Ferramentas: ligador (compilador gcc está incluída no conjunto de ferramentas).
- Gerando comando: gcc xxx.o -o xxx.exe há parâmetros de ligação
- papel:
- Biblioteca é introduzido: a introdução de bibliotecas, tais como: printf biblioteca, sistema, scanf como função.
- Combine vários arquivos objeto
- A rotina de inicialização combinado (rotina é chamada a função principal)
1.5 Resumo
- O processo acima pode referir-se o seguinte:
- O processo acima descrito não tem que ir passo a passo, que pode ser transformado directamente a partir de um lado frontal a quaisquer instruções para qualquer uma atrás, tais como:
- Pode ser alterado a partir xxx.c xxx.i (instrução gcc -E xxx.c -o xxx.i),
- Pode tornar-se xxx.s de xxx.c (instrução gcc -S xxx.c -o xxx.s),
- Xxx.c pode tornar-se xxx.o (instrução gcc -c xxx.c -o xxx.o),
- Xxx.c pode tornar-se xxx.exe (instrução gcc xxx.c -o xxx.exe),
- Pode tornar-se xxx.s de xxx.i (instrução gcc -S xxx.i -o xxx.s),
- Xxx.i pode tornar-se xxx.o (instrução gcc -c xxx.i -o xxx.o),
- Xxx.i pode tornar-se xxx.exe (instrução gcc xxx.i -o xxx.exe),
- E assim por diante (exemplificado na FIG parte inferior) ...
2. função principal
2.1 função principal em duas formas convencionais
-
Não há argumentos:
int main(void) {return 0;}
-
Há argumentos:
int main (int argc, char *argv[]) {return 0;}
(其中*argv[]可以写成**argv[])
2.2 função principal outras formas
-
int main()
-
void main()
-
int main(int c)
-
main()
-
main(int c)
-
Etc. Outros ... embora estes não são a forma padrão, mas o compilador pode aceitar.
3. depuração
-
Depuração é usado para encontrar erro de lógica ocorreu no programa, não há erros gramaticais! O editor não é coisa errada.
-
A idéia central: deixar a linha de programa de execução da linha.
-
Linha Número: Ferramentas - Opções - Editor de Texto - c / c ++ - número da linha (cheque).
-
processo de depuração :
-
Adicionando pontos de interrupção: um ou mais
1. Um método: Esquerda-clique no ponto de interrupção que você deseja adicionar esta linha para o lado esquerdo da área cinzenta, clique novamente para cancelar.
2. Método dois: o cursor do mouse pára em um ponto de interrupção em qualquer lugar que você deseja adicionar esta linha, prima F9 para adicionar, pressione F9 novamente desaparecer.
-
Debug: debug deve estar no modo de depuração, o modo de lançamento não pode ser.
-
F5 para iniciar a depuração (diferentes atalhos de software pode ser diferente, pode ser visto na barra de ferramentas acima).
-
O programa pode ser executado antes do intervalo, o primeiro ponto de ruptura após o programa não é executado.
-
modo de depuração:
1 ** - by-instrução é executada. ** teclas de atalho F11, uma por uma declaração para a próxima linha, que cumpre função para a função (consulte a função personalizada), a função continua a executar instruções de um por um, após a função terminar fora da função de rastreamento para continuar uma execução por um.
2 ** pelo processo de implementação. ** teclas de atalho F10, um a um processo para a próxima linha, a função se encontram, não entram na função interna, continuar a acompanhar uma por uma execução.
3. execução por pontos de interrupção. Quando existem vários pontos de interrupção no código, clique na barra de ferramentas acima do "Continuar" saltar diretamente para o próximo ponto de interrupção, há atalhos.
4. função de rejeição: shift + 10, pode estar fora de uma função do ponto de interrupção de corrente. (Porção não executada da executa a função descartáveis)
-
4. Variable
Três elementos da variável 4.1
- tipos de variáveis: número inteiro, verdadeiro, caráter, etc, para abrir o tamanho variável do espaço de memória.
- nomes de variáveis: para uso no programa.
- Os valores das variáveis: os dados reais armazenados na variável.
4.2 Definição Variável
- Define a sintaxe: Nome do nome da variável type = valor da variável. Tais como:
int a = 10;
- variável definida, a memória vai abrir um espaço correspondente à variável, mas a declaração de variável não abre espaço na memória.
4.3 Declaração de variáveis
- sintaxe:
- Método um:
int a;
variável não define o valor da variável, isto é, declarações de variáveis. - Método dois:
extern int a;
Use a palavra-chave extern declarou.
- Método um:
- Características:
- Se você quiser usar uma variável, você deve primeiro definir ele.
- O compilador antes de usar aparência variável para a frente, a definição, se não for definido, o compilador irá localizar automaticamente a declaração de variável, ele foi promovido para a definição.
- Por um lado, se é declarado com extern, não pode ascender.
5. constante
Constantes não são alteradas e não serão modificados dados. Há cerca de três maneiras:
- "Olá" é uma constante de cadeia, 'a' é uma constante de caracteres, 25 é um número inteiro constante, verdadeira constante é 63,335.
- Usando definir definições de macro (o mais comum), sintaxe:
#define 宏名 宏值
. Por exemplo:#define PI 3.14
- Note que o nome da macro e os valores intermediários macro não sinal de igual, não há fim de uma frase símbolos
- Utilizar a palavra-chave const, sintaxe: const nome da variável nome type = valor variável, tais como:
const int a = 1;
- uma variável poderia ter sido, mas após a modificação palavra-chave const, torna-se uma variável de somente leitura.
6. Identificação
- Nome da variável e o nome genérico da denominação constante.
6.1 requisito obrigatório
- Identificados por letras, números, sublinhado composição (_).
- Palavras-chave e identificadores não pode ser um nome de função, como principal, sistema, retorno, flutuar etc. não pode.
- Identificador não pode começar com os números, letras e pode começar com um sublinhado.
- maiúsculas e minúsculas:
- Geralmente usar letras maiúsculas para representar constantes, tais como:
#define MAX 200
- Normalmente utilizar letras minúsculas para a variável, tais como:
int a = 10;
- Geralmente usar letras maiúsculas para representar constantes, tais como:
convenção de nomenclatura 6.2
-
Grande corcunda Método: int HelloWorldHahaHohoHehe = 10;
- nomes de variáveis de várias palavras, capitalizar a primeira letra de cada palavra.
-
Pequena corcunda Método: int helloWorldHahaHohoHehe = 10;
- -Multiple palavra nomes de variáveis, a primeira letra da primeira palavra em letras minúsculas, eo resto de cada palavra em maiúsculas.
-
+ Minúsculas sublinhado: hello_world_haha_hoho_hehe int = 10;
- especial linguagem C!
7. sizeof palavra-chave
- sizeof não é uma função, ele é a palavra-chave.
- Utilizada para obter o tipo de dados, variável com o tamanho do espaço de memória.
- Como usar:
- sizeof (nome da variável) devolve um tamanho variável, em bytes.
- sizeof (tipo de dados) Retorna o tamanho do espaço de memória ocupado pelo tipo de dados, em bytes.
- variável suporte ao idioma nome C sintaxe sizeof de redacção, não comumente usados.
8. função printf
- função printf é formatado de saída.
- A forma geral é:
printf("格式匹配符", 输出表列);
formato 8,1 equiparador d
situação comum é %d %md %-md %ld %lld %hd
%d
Ela representa o número real de saída de bits de dados de números inteiros.%md
Indica bits de dados de saída, se m é inferior ao número real de bits de dados, o número real de bits de acordo com a saída de dados, se m for maior do que o número actual de bits de dados, o resultado de m-bit de saída justificado direita, preenchido com espaços deixados.%-md
Quando m é maior do que quando o número real de bits representado pelos dados, a saída de m-bit, o resultado justificada à esquerda, à direita acolchoado com espaços.%ld
Letra L representa inteiro longo. As modificações podem ser adicionados m, n, menos semelhante, as regras acima.%lld
Letters vai para inteiros longos longos. As modificações podem ser adicionados m, n, menos semelhante, as regras acima.%hd
Na carta h representa um inteiro curto. As modificações podem ser adicionados m, n, menos semelhante, as regras acima.
#include <stdio.h>
int main(void)
{
int a = 222, m = 555;
short int b = 3;
long int c = 4;
long long int d = 5;
printf("%d\n",a);
printf("%4d,%2d\n",a,a);
printf("%4d,%-4d\n",a,a);
printf("%04d,%4d\n",a,a);
printf("%d + %d = %d\n",a, m, a+m);
printf("%hd",b);
printf("%ld",c);
printf("%lld",d);
return 0;
}
formato 8.2 correspondência f
- forma comum de:
%f %m.nf %-m.nf %mf %.nf
%f
É o comprimento real real dos dados de saída.%-m.nf
M é um inteiro positivo que representa largura de dados, que compreende uma parte fraccionaria, a parte inteira e um ponto decimal; n é um inteiro positivo que representa o número de casas decimais.
#include <stdio.h>
int main(void)
{
float a = 3.1425;
printf("%f\n",a);
printf("%5.2f\n",a);
printf("%.2f\n",a);
printf("%-5.2f\n",a);
printf("%7.3f\n",a);
printf("%f\n",a);
printf("%4.8f\n",a);
return 0;
}
formato de correspondência 8.3 Character
- As formas mais comuns% c, gera um personagem.
#include<stdio.h>
int main(void)
{
char c = 'A';
printf("%c",c);
return 0;
}
formato da cadeia de correspondência 8.4
- As formas mais comuns
%s和%m.ns
. m representa um comprimento de cadeia de saída permite que, n é o número de caracteres da cadeia de caracteres representa tomada.
#include<stdio.h>
int main(void)
{
printf("%s\n","ABCDEFGHI");
printf("%3.2s\n","ABCDEFGHI");
printf("%-3s,%3s\n","ABCDEFGHI","ABCDEFGHI");
printf("%-.2s\n","ABCDEFGHI");
printf("%12.2s,%-12.2s\n","ABCDEFGHI","ABCDEFGHI");
printf("%12s,%-12s\n","ABCDEFGHI","ABCDEFGHI");
return 0;
}
9. inteiro
Obtendo o valor mínimo do valor máximo quando o tipo de dados, requer o uso de arquivos de cabeçalho#include<limits.h>
9.1 inteiro Assinado
nome | formulário | matcher Format | tamanho pegada | mínimo | máximo |
---|---|---|---|---|---|
inteiro curto | curta (int) | % hd | 2 bytes | -32768 | 32767 |
número inteiro | int | % d | 4 bytes | -2147483648 | 2147483647 |
inteiro longo | longa (int) | % ld | sistema de janelas 32 e 64 é de 4 bytes; o sistema Linux, 32 é de 4 bytes, 8 bytes 64 | -2147483648 | 2147483647 |
inteiro longo | longo longo (int) | % LLD | 8 bytes | -9223372036854775808 | 9223372036854775807 |
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("short的大小为:%d个字节\n",sizeof(short));
printf("short的最小值是:%hd,最大值是:%hd\n",SHRT_MIN,SHRT_MAX);
printf("int的大小为:%d个字\n",sizeof(int));
printf("int的最小值是:%d,最大值是:%d\n",INT_MIX,INT_MAX);
printf("long的大小为:%d个字节\n",sizeof(long));
printf("long的最小值是:%ld,最大值是:%ld\n",LONG_MIN,LONG_MAX);
printf("long long的大小为:%d个字节\n",sizeof(long long));
printf("long long的最小值是:%lld,最大值是:%lld",LLONG_MIN,LLONG_MAX);
return 0;
}
9,2 inteiro sem sinal
nome | formulário | matcher Format | tamanho pegada | mínimo | máximo |
---|---|---|---|---|---|
inteiro curto | unsigned short (int) | % Hu | 2 bytes | 0 | 65535 |
número inteiro | int não assinado | em% | 4 bytes | 0 | 4294967295 |
inteiro longo | unsigned longo (int) | % Lu | sistema de janelas 32 e 64 é de 4 bytes; o sistema Linux, 32 é de 4 bytes, 8 bytes 64 | 0 | 4294967295 |
inteiro longo | unsigned longo longo (int) | host% | 8 bytes | 0 | 18446744073709551615 |
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("unsigned short的大小为:%d个字节\n",sizeof(unsigned short));
printf("unsigned short的最大值是:%hu\n",USHRT_MAX);
printf("unsigned int的大小为:%d个字\n",sizeof(unsigned int));
printf("unsigned int的最大值是:%u\n",UINT_MAX);
printf("unsigned long的大小为:%d个字节\n",sizeof(unsigned long));
printf("long的最大值是:%lu\n",ULONG_MAX);
printf("unsigned long long的大小为:%d个字节\n",sizeof(unsigned long long));
printf("long long的最大值是:%llu",ULLONG_MAX);
return 0;
}
sentido sincero de Wang Fei Xie Chuanzhi transmitido professores convidados elaborados e materiais fornecidos.