Macros for function definitions/calls
chadwick.b
chadwick@ccs.neu.edu
Fri Jun 22 18:16:00 GMT 2007
Is it possible to split macro variable arguments into separate tokens? I
would like to write a macro which expands into two function definitions, one
which is wrapped in a pthread_mutex... forcing mutual exclusion on a given
function. Note, I haven't tried compiling this yet so there may be minor
errors, I wanted to see if I could get the right preprocessor output
first... Here's the first attempt:
#define ATOMIC(ret, NAME, ...) \
static pthread_mutex_t NAME##_mutex=PTHREAD_MUTEX_INITIALIZER;\
ret NAME(__VA_ARGS__){ \
ret retVal; \
while(pthread_mutex_lock(&NAME ## _mutex)); \
fprintf(stderr, " !! Error Entering: %s\n",#NAME); \
retVal = NAME ## _lock(__VA_ARGS__); \
pthread_mutex_unlock(&NAME ## _mutex); \
return retVal; \
} \
ret NAME ## _lock(__VA_ARGS__)
So that the usage:
ATOMIC(int, testFunc, int arg){
return 15;
}
Produces:
static pthread_mutex_t testFunc_mutex = PTHREAD_MUTEX_INITIALIZER;
int testFunc(int arg){
int retVal;
while(pthread_mutex_lock(&testFunc_mutex))
fprintf(stderr, " !! Error Entering: %s\n","testFunc");
retVal = testFunc_lock(int arg);
pthread_mutex_unlock(&testFunc_mutex);
return retVal;
}
int testFunc_lock(int arg){
return 15;
}
The problem is that I'm not sure if there is a way to drop the type from the
argument list when calling the 'generated' function. Does anyone know if
this is possible? Or have a good/better way to do what I'm attempting?
Basically to allow a bunch of functions to be changed between non-atomic and
atomic easily (with minimal manual effort).
Thanks,
Bryan.
--
View this message in context: http://www.nabble.com/Macros-for-function-definitions-calls-tf3965655.html#a11255528
Sent from the gcc - Help mailing list archive at Nabble.com.
More information about the Gcc-help
mailing list