繁体   English   中英

C Unix / Linux编程:md_addr_t是哪种类型?

[英]C Unix/Linux programming: Which type is md_addr_t?

GCC给我以下内容:

warning: passing argument 2 of ‘_panic’ discards qualifiers from pointer target type

misc.h:191: note: expected ‘char *’ but argument is of type ‘const char *’

第二个参数的类型为md_addr_t 我如何将其转换为char*以及md_addr_t是什么意思? (手册页都无法帮助我或Google)

拉尔斯曼人已经正确指出了原因。 强制转换const时会看到此警告,即如果函数采用non-const参数但您传递了const参数,那么如果函数修改了传递的参数,则您将具有未定义的行为。 在代码中为typedef的md_addr_t与此无关。 在代码中,您收到有关使用panic警告,定义如下(来自链接中ss-ppc-little.tgz的信息):

#ifdef __GNUC__
/* declare a panic situation, dumps core */
#define panic(fmt, args...)     \
  _panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## args)

void
_panic(char *file, char *func, int line, char *fmt, ...)
__attribute__ ((noreturn));
#else /* !__GNUC__ */
void 
panic(char *fmt, ...);
#endif /* !__GNUC__ */

在Unix / Linux系统上,已定义__GNUC__ ,因此使用第一个定义,即在打印消息前先输入待处理的文件名( __FILE__ ),函数名( __FUNCTION__ )和行号( __LINE__ )。 (有关详细信息,请参_panic 链接 。)在这里,您可以看到_panic char*作为第一个和第二个参数,但是传递的参数是__FILE____FUNCTION__ ,其中__FUNCTION__static const char[] 您可以将_panic(char *file, char *func, int line, char *fmt, ...)更改为_panic(char *file, const char func[], int line, char *fmt, ...)_panic(char *file, const char *func, int line, char *fmt, ...) -编译器在抱怨修正您的警告。 由于__FILE__也是常量,因此您可以考虑更改为_panic(const char *file, const char *func, int line, char *fmt, ...)
希望这可以帮助!

grep -R md_addr_t /usr/include在良好填充不返回任何/usr/include ,也不门铃。 它必须在您的应用程序/库中。

在任何情况下,强制转换为char *都只是前缀(char *) ,这也是保证始终在C语言中正常工作的少数强制转换之一,尽管强制转换const可能意味着有人将要编写读写-仅内存,不能保证正常工作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM