Pergunta

Como você passar as opções para um executável? Existe uma maneira mais fácil de fazer as opções argumentos booleanos?

EDIT: As duas últimas respostas sugeriram o uso de argumentos. Eu sei que pode codificar uma solução viável assim, mas eu prefiro tê-los ser opções.

EDIT2: Per pedidos de esclarecimento, eu vou usar este exemplo simples: É bastante fácil de argumentos punho porque eles automaticamente se analisado em uma matriz.

./printfile file.txt 1000

Se eu quero saber o que o nome do arquivo que o usuário deseja imprimir, eu acessá-lo via argv [1].

Agora, sobre como esta situação:

./printfile file.txt 1000 --nolinebreaks

O usuário deseja imprimir o arquivo sem quebras de linha. Isso não é necessário para que o programa seja capaz de executar (como nome e número de linhas a serem impressas são), mas o usuário tem a opção de usar se se ele / ela gostaria. Agora eu poderia fazer isso usando:

./printfile file.txt 1000 true

O prompt de uso seria informar ao usuário que o terceiro argumento é usado para determinar se deve imprimir o arquivo com quebras de linha ou não. No entanto, isso parece um pouco desajeitado.

Foi útil?

Solução

Você parece pensar que há alguma diferença fundamental entre "opções" que começam com "--" e "argumentos" que não. A única diferença está em como você analisá-los.

Pode valer a pena o seu tempo para olhar para analisador opção getopt() / getopt_long() do GNU. Ele suporta passando argumentos com opções como --number-of-line-breaks 47.

Outras dicas

argumentos de linha de comando é o caminho a percorrer. Você pode querer considerar o uso de Boost.ProgramOptions para simplificar esta tarefa.

Eu uso dois métodos para passar informações:

1 / O uso de argumentos de linha de comando, que são feitas mais fácil de manusear com bibliotecas específicas, tais como getargs.

2 / As variáveis ??de ambiente, usando getenv.

Pax tem a idéia certa aqui.

Se precisar de comunicação de duas vias mais completa, abra o processo com canos e outras coisas enviar para stdin / escutar em stdout.

Você também pode usar a função de janela PostMessage (). Isto é muito útil se o executável que você deseja enviar as opções para já está em execução. Eu posso postar alguns códigos de exemplo, se você está interessado nesta técnica.

A questão não é incrivelmente clara quanto ao contexto e apenas o que você está tentando fazer - quer dizer executando um executável a partir de dentro de um programa C ++? Existem várias funções da biblioteca padrão do C com nomes como execl (), execv (), execve (), ... que tomem as opções como cordas ou ponteiro para uma matriz de strings. Há também sistema (), que leva uma string contendo tudo o que seria de digitação em uma festa rápida, opções e tudo.

Eu gosto da biblioteca popt. É C, mas funciona bem a partir C ++ também.

Ele não parece ser multi-plataforma embora. Descobri isso quando eu tive que cortar a minha própria versão da API compatível dele para um porto de Windows de algum software Linux.

Você pode colocar opções em um arquivo ini e usar o de GetPrivateProfileXXX API para criar uma classe que pode ler o tipo de opções do programa que você está procurando a partir do ini.

Você também pode criar um shell interativo para seu aplicativo para mudar certas configurações em tempo real.

EDIT: De suas edições, você não pode simplesmente analisar cada opção à procura de palavras-chave especiais associados a essa opção que são "opcionais"?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top