2011-03-31 19 views
15

Bazı C dize sabitlerini birden çok c dosyası arasında paylaşmak istiyorum. sabitleri okunabilmesi için birden fazla satır yayılan: Bir c başlık altında paylaşılan c sabitleri

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

yukarıdaki yapmak QUERY yeniden tanımlanması hata veriyor. Makroyu arka plan olarak kullanmak istemiyorum '' her satırdan sonra gerekecektir. Bunları ayrı c dosyasında ve exe değişkenlerini h dosyasında tanımlayabilirim ama bunu yapmak için tembel hissediyorum.

Bunu C içinde gerçekleştirmenin başka bir yolu var mı?

+0

Başlık dosyaları olarak Ar erkekler diyor - cevabını kontrol edin. – Sadique

+0

Lütfen bana olumsuz oy kullanma nedenini bildirin. – Manish

cevap

19

Bazı .c dosyalarında, yazdıklarınızı yazın. Uygun .h dosyasında , sen sürekli

Başka hiçbir iyi yolu :) HTH

+0

:(Sanırım öyle sanırım o kadar tembel olmayı bırakmam gerekiyor! – Manish

+0

@Manish: Tam olarak :) –

+0

@Manish :: Her '.c' dosyasındaki bildirimi yazmaktan daha iyidir. Ve biliyorsun Ctrl + C' - Ctrl + V' da çalışır. – Sadique

2

Sadece #define onları

ayırabilirsiniz gereken yere

extern const char* QUERY; //just declaration 

.h dosyası dahil yazma

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

ve daha sonra bir tanımı bunları birleştirme

#define QUERY QUERY1 QUERY2 
+0

Bu oldukça yaratıcı :) ama çirkin görünüyor. – Manish

+1

Çirkin ve "backspace" \ "" el ele git :) – pmg

0

Orada bir dosyada değişkenleri, başlıkta extern bunları yayınlama

  • yer birkaç yolu vardır ve
  • eklemek için bazı dış aracını kullanarak düşünün gerekli başlığı içermesi '\' de makro tanımının ucu
  • sizin tembelliğe aşmak ve tüm dosyalarda extern olarak değişkenleri bildirmek
6

statik işbirliği kullanabilirsiniz nsts, tüm amaçlara ve amaçlarınıza ulaşmanıza yardımcı olur.

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; 
} 
İlgili konular