gpt4 book ai didi

c - C 宏上的警告过多

转载 作者:行者123 更新时间:2023-11-30 17:14:37 25 4
gpt4 key购买 nike

我正在尝试一种在我的代码上标记警告的方法,但我犯了一些错误并且不明白在哪里。我的编译器对这个宏的每次使用都给出了太多警告:

#define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);

#define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);

使用示例:

MPL_ERROR_MESSAGE("Test %d", 2);
     In file included from ../trunk/mpl_position.h:5:0,                     from ../trunk/mpl_baseenvironment.h:6,                     from ../trunk/mpl_baseenvironment.cpp:1:    ../trunk/mpl_baseenvironment.cpp: In member function ‘int MPL_BaseEnvironment::getEnemyRobotAt(MPL_Position&, int)’:    ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);                                         ^    ../trunk/mpl_baseenvironment.cpp:28:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’             MPL_ERROR_MESSAGE("(invalid value) not in [0,%d) ", i_ER, qlMPLP_enemyRobot__.size());             ^    ../trunk/mpl_baseenvironment.cpp: In member function ‘int MPL_BaseEnvironment::deleteEnemyRobotAt(int)’:    ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);                                         ^    ../trunk/mpl_baseenvironment.cpp:45:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’             MPL_ERROR_MESSAGE("(invalid value) not in [0,%d) ", i_ER, qlMPLP_enemyRobot__.size());             ^    ../trunk/mpl_baseenvironment.cpp: In member function ‘int MPL_BaseEnvironment::getMovableObstacleAt(MPL_Position&, int)’:    ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__

EDIT: UPDATED Warnings list

    ../trunk/mpl_gridenvironment.h: In member function ‘long int MPL_GridEnvironment::arrayIndex(MPL_Position&)’:    ../trunk/mpl_utils.h:7:167: warning: unknown conversion type character ‘,’ in format [-Wformat=]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);                                         ^    ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’             MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);             ^    ../trunk/mpl_utils.h:7:167: warning: unknown conversion type character ‘,’ in format [-Wformat=]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);                                         ^    ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’             MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);             ^    ../trunk/mpl_utils.h:7:167: warning: unknown conversion type character ‘)’ in format [-Wformat=]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);                                         ^    ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’             MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);             ^    ../trunk/mpl_utils.h:7:167: warning: too many arguments for format [-Wformat-extra-args]     #define MPL_ERROR_MESSAGE2(output, fmt, ...) fprintf(output, ("\n[ERROR][%s:%d( %s )]\n---  " fmt "  ---\n\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__); //error message                                                                                                                                                                           ^    ../trunk/mpl_utils.h:9:37: note: in expansion of macro ‘MPL_ERROR_MESSAGE2’     #define MPL_ERROR_MESSAGE(fmt, ...) MPL_ERROR_MESSAGE2(stderr, fmt, ##__VA_ARGS__);                                         ^    ../trunk/mpl_gridenvironment.h:253:9: note: in expansion of macro ‘MPL_ERROR_MESSAGE’             MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);

EDIT 2: as was requested, one of the places that triggers warnings:

inline long arrayIndex(MPL_Position& sMPLP_p)
{
long x, y, z;
x = MPL_ROUND_INT((d_delta*sMPLP_p.getX())/d_sizeX__);
y = MPL_ROUND_INT((d_delta*sMPLP_p.getY())/d_sizeY__);
z = MPL_ROUND_INT((d_delta*sMPLP_p.getZ())/d_sizeZ__);

if( (x>=0) && (x<n_sizeX__) && (y>=0) && (y<n_sizeY__) && (z>=0) && (z<n_sizeZ__) ){ //isValidPosition(...)
return( (x*n_sizeY__ + y)*n_sizeZ__ + z );
}

MPL_ERROR_MESSAGE("Invalid Position at (%l, %l, %l)", x, y, z);

MPL_GE_InvalidPosition(sMPLP_p);

return( -1 );
}

(n_size?__ 和 d_size?__ 是类属性;不必费心去理解...:P)

最佳答案

关于您编辑中列出的警告:

unknown conversion type character ‘,’ in format 

这个

... "Invalid Position at (%l, %l, %l)", ...

应该是

... "Invalid Position at (%ld, %ld, %ld)", ...

您传递长签名整数signed int转换说明符d。传递 long 时,在其前面添加 长度修饰符 l

<小时/>

并且,虽然不相关,但请从宏中删除尾随的 ;

关于c - C 宏上的警告过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30259343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com