c++ - 错误: cast from ‘void*’ to ‘int’ loses precision [-fpermissive] in makefile

标签 c++ c gcc casting makefile

在 ubuntu 12.04 LTS(64 位)上编译以下 makefile 时遇到此错误:

Ana.cxx:21:46: error: cast from ‘void*’ to ‘int’ loses precision [-fpermissive]

在这一行中:

21 : TThread::Printf("Start of Ana %x \n" ,(int)ptr);

这是生成文件:

ObjSuf        = o
SrcSuf        = cxx
DllSuf        = so
ExeSuf        =
OutPutOpt     = -o 
CXXFLAGS      = -g -Wall -fPIC -DOSF1 
CXX           = g++
CCFLAGS       = -g -Wall -DOSF1 
CC            = gcc
LD            = g++
LDFLAGS       = -g
SOFLAGS       = -shared
ROOTCFLAGS   := $(shell root-config --cflags) -DFILL_ON_FLY 
ROOTLIBS     := $(shell root-config --libs) -lNew -lThread -lMinuit -lPhysics
ROOTGLIBS    := $(shell root-config --glibs)  -lNew -lThread
EVENTO        = BINAEvent.$(ObjSuf) Ana.$(ObjSuf) BINAEventDict.$(ObjSuf)     mwpc_software.o tcpip.o Genbood.o  
EVENTS        = BINAEvent.$(SrcSuf) Ana.$(SrcSuf) BINAEventDict.$(SrcSuf) mwpc_software.c tcpip.c Genbood.c 
EVENTLIB      = $(ROOTGLIBS)
EVENTEXE      = ana
OBJS          = $(EVENTO)
    .SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf)
    .PHONY:    Aclock Hello Tetris
     $(EVENTEXE):     $(OBJS)
         $(LD) $^ $(ROOTLIBS) $(OutPutOpt) $@
         @echo "$@ done"
     clean:
         @rm -f $(OBJS) core *~ *Dic* ana *.o
     .SUFFIXES: .$(SrcSuf)
     BINAEvent.$(ObjSuf): BINAEvent.h
       BINAEventDict.$(SrcSuf): BINAEvent.h BINAEventLinkDef.h
       @echo "Generating dictionary $@..."
       @rootcint -f $@ -c $^
      .$(SrcSuf).$(ObjSuf):
       $(CXX) $(CXXFLAGS) $(ROOTCFLAGS) -c $<
    .c.$(ObjSuf):
     $(CXX) $(CXXFLAGS) $(ROOTCFLAGS) -c $<

正确的转换方法是什么?

提前致谢。

最佳答案

该错误与 makefile 无关。该错误位于源代码中,位于错误显示的行上。

在您的平台上,指针不适合 int。如果将指针强制转换为整数,则可能应该使用 stdint.h 中的 intptr_tuintptr_t,它们保证足够大。

我不知道TThread::Printf是什么,它不是标准的。但使用 printf 打印指针地址的常用方法是将指针作为 void* 传递,并使用 %p 格式说明符。 TThread::Printf 也可能出现这种情况。

关于c++ - 错误: cast from ‘void*’ to ‘int’ loses precision [-fpermissive] in makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25489286/

相关文章:

c++ - 复制构造函数中的初始化列表

c - 冗余或良好实践 - 结构

python - Cython:教程找不到从未引用过的外部符号

c++ - 迭代器增量导致clang和gcc的结果不同

c - 如何通过优化标志追踪代码行为不同的原因

c++ - 二维数组内存分配 (malloc) 返回 NULL

c++ - 返回非 const 引用的 Const 方法编译

c++ - 在 MFC C++ 中获取桌面分辨率

c++ - 用 C++ 字符串替换 snprintf

c - 共享库 undefined symbol