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

191
Visualizações
¿Se puede exponer una constante/estática de Rust a C?

Digamos que tengo una API de Rust que contiene una constante o estática, por ejemplo, un i32. Quiero usar esta API de Rust de C. Desde el lado de C, quiero usar esa constante como tamaño de matriz. ¿Estoy en lo cierto en que no hay forma de hacerlo? ¿La mejor solución es volver a declarar la constante en mis archivos de encabezado C que proporcionan las declaraciones para el resto de la API de Rust?

Actualización: para ser más específicos, estoy usando un compilador que no admite matrices de longitud variable (Visual C++ 2005)

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Ciertamente puedes hacerlo, al menos dentro de las funciones:

cnst.rs :

 #[no_mangle] pub static X: i32 = 42;

cnstuse.c :

 #include <stdint.h> #include <stdio.h> extern const int32_t X; int main() { char data[X]; printf("%lu\n", sizeof(data)); return 0; }

Compilacion:

 % rustc --crate-type=staticlib cnst.rs note: link against the following native artifacts when linking against this static library note: the order and any duplication can be significant on some platforms, and so may need to be preserved note: library: System note: library: pthread note: library: c note: library: m % gcc -o cnstuse cnstuse.c libcnst.a % ./cnstuse 42

Sin embargo, las declaraciones de matriz de nivel superior no pueden usar variables/constantes globales para el tamaño, por lo que esto solo funcionará dentro de las funciones.

over 4 years ago · Santiago Trujillo Relatório

0

Para ser más específico, estoy usando un compilador que no admite matrices de longitud variable (Visual C++ 2005)

Esto requiere que la constante se defina (y no simplemente se declare) en el punto de uso. Además, C tiene muchas más restricciones que C++ sobre lo que constituye una constante utilizable como una dimensión de matriz: básicamente, literales enteros (que se pueden sustituir a través de macros) y enumeradores; a diferencia de C++, no tiene constantes integrales ( int const x ), por lo que, según el modo (C o C++) en el que compile, es posible que esté restringido.

No hay ninguna función en rustc o Cargo para generar automáticamente archivos C, los símbolos solo se exportan y están disponibles en tiempo de enlace, no en tiempo de compilación.


Sin embargo, tiene suerte, hay una solución, aunque es un poco más engorrosa.

Rust presenta un archivo build.rs , que se compila y ejecuta como parte del proceso de compilación normal. Este archivo puede contener comandos para generar otros archivos, y por lo tanto es perfectamente posible:

  1. Anote la constante de una vez por todas en un archivo .rs
  2. Genere un encabezado C "exportando" esta constante en formato C a través del archivo build.rs .
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