2011-03-31 13 views
15

Quiero compartir ciertas constantes de cadena C en varios archivos c. Las constantes abarcan varias líneas para facilitar la lectura:constantes c compartidas en un encabezado

const char *QUERY = "SELECT a,b,c " 
        "FROM table..."; 

Haciendo anterior da error redefinición de QUERY. No quiero usar macro ya que se requerirá el retroceso '\' después de cada línea. Podría definirlos en un archivo c separado y externar las variables en el archivo h, pero me siento flojo para hacerlo.

¿Hay alguna otra forma de lograr esto en C?

+0

Archivos de cabecera como Arkansas Los hombres dicen: comprueba su respuesta. – Sadique

+0

Dime amablemente el motivo del voto negativo. – Manish

Respuesta

19

En algún archivo .c, escribir lo que has escrito. En el archivo .h apropiada, escribir

extern const char* QUERY; //just declaration 

Incluya el archivo .h siempre que se necesite la constante

Ninguna otra buena manera :) HTH

+0

:(Creo que sí. Supongo que necesito dejar de ser tan vago! – Manish

+0

@Manish: Exactamente :) –

+0

@Manish :: Es mejor que escribir la declaración en cada archivo '.c'. Y sabes que 'Ctrl + C' -' Ctrl + V' también funciona. – Sadique

2

puede simplemente #define separará

#define QUERY1 "SELECT a,b,c " 
#define QUERY2 "FROM table..." 

y añádelos en una definición

#define QUERY QUERY1 QUERY2 
+0

Eso es bastante creativo :) pero se ve feo. – Manish

+1

feo y "backspace '\'" ir de la mano :) – pmg

0

Hay varias maneras

  • lugar las variables en un archivo, los declaran extern en la cabecera e incluyen esa cabecera cuando sea necesario
  • considerar el uso de alguna herramienta externa para anexar '\' en el final de su definición de macro
  • superar su pereza y declaran sus variables como extern en todos sus archivos
6

Usted podría utilizar co estática nsts, a todos los efectos, se logrará tu efecto.

myext.h:

#ifndef _MYEXT_H 
#define _MYEXT_H 
static const int myx = 245; 
static const unsigned long int myy = 45678; 
static const double myz = 3.14; 
#endif 

myfunc.h:

#ifndef MYFUNC_H 
#define MYFUNC_H 
void myfunc(void); 
#endif 

myfunc.c:

#include "myext.h" 
#include "myfunc.h" 
#include <stdio.h> 

void myfunc(void) 
{ 
    printf("%d\t%lu\t%f\n", myx, myy, myz); 
} 

myext.c:

#include "myext.h" 
#include "myfunc.h" 
#include <stdio.h> 

int main() 
{ 
    printf("%d\t%lu\t%f\n", myx, myy, myz); 
    myfunc(); 
    return 0; 
}