1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 <2019> 2020 2021 2022 2023 2024 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 <2019> 2020 2021 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Two v7.0.3.1 questions |
From: | Pierrick M Hanlet via Tech-talk <[email protected]> |
To: | "[email protected]" <[email protected]> |
Date: | Tue, 5 Nov 2019 16:21:57 +0000 |
Hi, I'm on a linux SL7.6 machine and am using v7.0.3.1. I don't understand the epicsRegisterFunction macro. I've used aSubRecords dozens of times with C files, but now that I'm attempting to use it in a C++ file, I cannot get the macro to do its magic. At the bottom of my xxx.cpp file with all the correct headers, I have the code: extern "C" { short PVdata(struct aSubRecord*); } short PVdata(struct aSubRecord *pvData) { return 0; // this will eventually be real code } extern "C" { epicsRegisterFunction(PVdata); } This results in: /home/epics/epicsDEV/base/include/epicsExport.h:37:22: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object [-Wpedantic] epicsExportRegistrar(register_func_ ## func) ^ /home/epics/epicsDEV/base/include/epicsExport.h:32:72: note: in definition of macro 'epicsExportRegistrar' epicsShareFunc REGISTRAR EPICS_EXPORT_PFUNC(func) = (REGISTRAR)(void*)&func ^ ../acnetPV.cpp:167:3: note: in expansion of macro 'epicsRegisterFunction' epicsRegisterFunction(PVdata); ^ /home/epics/epicsDEV/base/include/epicsExport.h:37:22: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object [-Wpedantic] epicsExportRegistrar(register_func_ ## func) ^ /home/epics/epicsDEV/base/include/epicsExport.h:32:72: note: in definition of macro 'epicsExportRegistrar' epicsShareFunc REGISTRAR EPICS_EXPORT_PFUNC(func) = (REGISTRAR)(void*)&func ^ ../acnetPV.cpp:167:3: note: in expansion of macro 'epicsRegisterFunction' epicsRegisterFunction(PVdata); Am I misusing epicsRegisterFunction() somehow? As a second issue, I get some weird warning messages: In file included from /home/epics/epicsDEV/base/include/epicsStdlib.h:20:0, from acnetPV_registerRecordDeviceDriver.cpp:9: /home/epics/epicsDEV/base/include/epicsTypes.h:44:14: warning: ISO C++ 1998 does not support 'long long' [-Wlong-long] typedef long long epicsInt64; ^ /home/epics/epicsDEV/base/include/epicsTypes.h:45:23: warning: ISO C++ 1998 does not support 'long long' [-Wlong-long] typedef unsigned long long epicsUInt64; ^ In file included from acnetPV_registerRecordDeviceDriver.cpp:9:0: /home/epics/epicsDEV/base/include/epicsStdlib.h:39:43: warning: ISO C++ 1998 does not support 'long long' [-Wlong-long] epicsParseLLong(const char *str, long long *to, int base, char **units); ^ /home/epics/epicsDEV/base/include/epicsStdlib.h:41:53: warning: ISO C++ 1998 does not support 'long long' [-Wlong-long] epicsParseULLong(const char *str, unsigned long long *to, int base, char **units); ^ In file included from /home/epics/epicsDEV/base/include/registryCommon.h:15:0, from acnetPV_registerRecordDeviceDriver.cpp:12: /home/epics/epicsDEV/base/include/dbJLink.h:69:48: warning: ISO C++ 1998 does not support 'long long' [-Wlong-long] jlif_result (*parse_integer)(jlink *, long long num); ^ ^ -- Pierrick Hanlet Fermi National Accelerator Accelerator Front End Controls +1-630-840-5555 -- lab +1-312-687-4980 -- mobile "Whether you think you can or think you can't, you're right" -- Henry Ford |