Exemplos de Código Práticos
Cenários de Validação de Argumentos no Mundo Real
graph TD
A[Validação Prática de Argumentos] --> B[Processamento de Arquivos]
A --> C[Ferramentas de Cálculo]
A --> D[Gerenciamento de Configurações]
A --> E[Interfaces de Linha de Comando Complexas]
1. Utilitário de Processamento de Arquivos
#include <stdio.h>
#include <stdlib.h>
void process_files(int argc, char *argv[]) {
// Validar pelo menos 2 argumentos: nome do programa e pelo menos um arquivo
if (argc < 2) {
fprintf(stderr, "Uso: %s <arquivo1> [arquivo2] ...\n", argv[0]);
exit(1);
}
// Limitar o número máximo de arquivos para processamento
if (argc > 6) {
fprintf(stderr, "Erro: Máximo de 5 arquivos permitidos\n");
exit(1);
}
// Processar cada arquivo
for (int i = 1; i < argc; i++) {
FILE *file = fopen(argv[i], "r");
if (file == NULL) {
fprintf(stderr, "Erro: Não foi possível abrir o arquivo %s\n", argv[i]);
continue;
}
// Lógica de processamento de arquivos
fclose(file);
}
}
int main(int argc, char *argv[]) {
process_files(argc, argv);
return 0;
}
2. Ferramenta de Cálculo com Argumentos Flexíveis
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Matriz de validação de argumentos
typedef struct {
const char *operation;
int min_args;
int max_args;
} OperationValidation;
OperationValidation validations[] = {
{"add", 3, 10},
{"multiply", 3, 10},
{"divide", 3, 3}
};
void validate_calculation_args(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Uso: %s <operação> <número1> <número2> ...\n", argv[0]);
exit(1);
}
// Encontrar operação correspondente
for (size_t i = 0; i < sizeof(validations)/sizeof(validations[0]); i++) {
if (strcmp(argv[1], validations[i].operation) == 0) {
if (argc < validations[i].min_args || argc > validations[i].max_args) {
fprintf(stderr, "Erro: %s requer de %d a %d argumentos\n",
validations[i].operation,
validations[i].min_args,
validations[i].max_args);
exit(1);
}
return;
}
}
fprintf(stderr, "Erro: Operação desconhecida\n");
exit(1);
}
int main(int argc, char *argv[]) {
validate_calculation_args(argc, argv);
// Lógica de cálculo segue
return 0;
}
Técnicas de Validação de Argumentos
| Técnica |
Descrição |
Exemplo de Uso |
| Contagem Exata |
Requer número específico de argumentos |
Operação de divisão |
| Faixa Flexível |
Permite contagem variável de argumentos |
Adição, multiplicação |
| Baseada em Operação |
Validar com base em operação específica |
Ferramentas de linha de comando complexas |
Estratégias de Validação Avançadas
- Utilize regras de validação estruturadas
- Implemente verificações específicas para cada operação
- Forneça mensagens de erro claras
- Suporte a padrões de entrada flexíveis
Boas Práticas de Tratamento de Erros
- Valide argumentos precocemente
- Utilize mensagens de erro descritivas
- Forneça instruções de uso
- Lidar com diferentes cenários de entrada
O LabEx recomenda o desenvolvimento de técnicas robustas de validação de argumentos para criar aplicações de linha de comando confiáveis e amigáveis ao usuário.