Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

209
Visualizações
¿Es seguro usar el puntero argv globalmente?

¿Es seguro usar el puntero argv globalmente? ¿O hay alguna circunstancia en la que pueda dejar de ser válida?

es decir: ¿Este código es seguro?

 char **largs; void function_1() { printf("Argument 1: %s\r\n",largs[1]); } int main(int argc,char **argv) { largs = argv; function_1(); return 1; }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Sí, es seguro usar argv globalmente; puede usarlo como usaría cualquier char** en su programa. El estándar C99 incluso especifica esto:

Los parámetros argc y argv y las cadenas a las que apunta la matriz argv serán modificables por el programa y conservarán sus últimos valores almacenados entre el inicio y la finalización del programa.

El estándar C++ no tiene un párrafo similar, pero el mismo está implícito sin ninguna regla en contrario.

Tenga en cuenta que C ++ y C son lenguajes diferentes y solo debe elegir uno para hacer su pregunta.

over 4 years ago · Santiago Trujillo Relatório

0

Debería ser seguro siempre que la función main() no salga. Algunos ejemplos de cosas que pueden suceder después de la salida de main() son:

  1. Destructores de variables globales y estáticas
  2. Subprocesos que se ejecutan más que main()

El argv almacenado no debe usarse en esos.

La referencia no dice nada que dé una razón para suponer que la vida útil de los argumentos de la función main() difiere de las reglas generales para la vida útil de los argumentos de la función.

Siempre que el puntero argv sea válido, el tiempo de ejecución de C/C++ debe garantizar que el contenido al que apunta este puntero sea válido (por supuesto, a menos que algo dañe la memoria). Por lo tanto, debe ser seguro usar el puntero y el contenido durante tanto tiempo. Después de que main() regresa, tampoco hay razón para que el tiempo de ejecución de C/C++ mantenga el contenido válido. Entonces, el razonamiento anterior se aplica tanto al puntero como al contenido al que apunta.

over 4 years ago · Santiago Trujillo Relatório

0

¿Es seguro usar el puntero argv globalmente?

Esto requiere un poco más de aclaración. Como dice la especificación C11 en el capítulo §5.1.2.2.1, Inicio del programa

[..].. con dos parámetros (referidos aquí como argc y argv , aunque se puede usar cualquier nombre, ya que son locales a la función en la que se declaran)

Eso significa que las variables mismas tienen un alcance limitado a main() . Ellos mismos no son globales .

De nuevo la norma dice,

Los parámetros argc y argv y las cadenas a las que apunta la matriz argv serán modificables por el programa y conservarán sus últimos valores almacenados entre el inicio y la finalización del programa.

Eso significa que la vida útil de estas variables es hasta que main() finaliza la ejecución.

Por lo tanto, si está utilizando una variable global para mantener el valor de main() , puede usar de forma segura esos globales para acceder a la misma en cualquier otra función.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda