Skip to content

Conversation

@Daichou
Copy link
Contributor

@Daichou Daichou commented Nov 1, 2018

original bug

  • original source code is use g++ 7.3.0 will build failed. Because in c99 FUNCTION marco should not use string concatenate.
  • VA_ARGS Variadic marco may be empty. So it need to add "##" to fix.
[ 14%] Building CXX object CMakeFiles/rs2driver.dir/src/Rs2Stream.cpp.o
In file included from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.h:3:0,
                 from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Device.h:3,
                 from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Driver.h:3,
                 from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:1:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘OniStatus oni::driver::Rs2Stream::initialize(oni::driver::Rs2Device*, rs2_sensor*, int, int, std::vector<oni::driver::Rs2StreamProfileInfo>*)’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:31:2: note: in expansion of macro ‘rsTraceFunc’
  rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, sensorId, streamId);
  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:31:2: note: in expansion of macro ‘rsTraceFunc’
  rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, sensorId, streamId);
  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘void oni::driver::Rs2Stream::shutdown()’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:55:18: note: in expansion of macro ‘rsTraceFunc’
  if (m_sensor) { rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId); }
                  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:55:18: note: in expansion of macro ‘rsTraceFunc’
  if (m_sensor) { rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId); }
                  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘virtual OniStatus oni::driver::Rs2Stream::start()’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:74:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:74:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘virtual void oni::driver::Rs2Stream::stop()’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:86:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:86:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘virtual OniStatus oni::driver::Rs2Stream::convertDepthToColorCoordinates(oni::driver::StreamBase*, int, int, OniDepthPixel, int*, int*)’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:39:145: error: expected primary-expression before ‘)’ token
 raceError(format, ...) printf("[RS2] ERROR at FILE %s LINE %d FUNC %s\n\t" format "\n", __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)
                                                                                                                                      ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:114:3: note: in expansion of macro ‘rsTraceError’
   rsTraceError("Invalid colorStream");
   ^~~~~~~~~~~~
CMakeFiles/rs2driver.dir/build.make:86: recipe for target 'CMakeFiles/rs2driver.dir/src/Rs2Stream.cpp.o' failed
make[2]: *** [CMakeFiles/rs2driver.dir/src/Rs2Stream.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/rs2driver.dir/all' failed
make[1]: *** [CMakeFiles/rs2driver.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

update

For FUNCTION marco, it must not use string concatenate I follow GNU GCC Function Names as Strings use %s format to fix.
For VA_ARGS variadic macro, I follow GNU GCC Variadic Macros to fix it.

__FUNCTION__ marco cannot use string concatenate in prinf() args, it
need %s format output.
__VA_ARGS__ will appear no empty argument situation. So we need add ##
before it to remove privious comma.
@dorodnic
Copy link
Contributor

dorodnic commented Nov 1, 2018

Thank you @Daichou
@timofey-aleynikov could you please take a look?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants