我想使用primefaces比较和交换,但不是等于,我想只在内存位置不等于旧值时进行交换。 在C中有可能吗?
我的情况非常奇怪。 每次我尝试编译我的arm项目(LPC2378,codesourcery arm-none-eabi-gcc-4.5.1)时我都会遇到同样的错误 /media/data/Projects/arm/uart/main.c:39: undefined reference to `__aeabi_uidiv’ /media/data/Projects/arm/uart/main.c:40: undefined reference to `__aeabi_uidiv’ 违规代码如下所示: U0DLL = ((((PLLCFG & 0x7FFF) + 1) * F_OSC) / ((((PLLCFG & (0xFF <> 16) + 1) * ((CCLKCFG & 0xFF) + 1) * 8 * BAUD * 1)) % 256; U0DLM = ((((PLLCFG & 0x7FFF) + 1) * F_OSC) / […]
在查看这个简单函数的汇编程序(参见godbolt.org )时 extern int global; void doit(int *); void call_doit(){ doit(&global); } 32位值用于保存global地址: call_doit: movl $global, %edi jmp doit 据我所知,这里使用32位寄存器(即%edi )优于64位寄存器(即%rdi ),因为可以保存2个字节( movl $global, %edi需要5个字节而movq $global, %rdi需要7个字节+ 4个额外字节,如果不假设$global适合32位)。 (编者注:编译器实际上使用7字节lea global(%rip), %rdi来创建一个来自RIP + 32位相对位移的64位地址,编译器可以假设它在范围内有相关原因。并且movabs $global, %rdi对于64位绝对地址movabs $global, %rdi为10个字节,而不是11个。) 但是为什么编译器允许假设全局变量的地址适合这32位? 编译器有什么保证? 对于局部变量,编译器使用64位寄存器来保存堆栈地址,例如: void doit(int *); void call_doit(){ int local=0; doit(&local); } 结果(见godbolt.org ): call_doit: subq $24, %rsp […]
较旧版本的gcc(例如4.0.2或4.1.2)具有-df选项(请参阅http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Debugging-Options.html#index- fdump_002drtl_002dcfg-357 )。 我使用此选项转储文件filename.c.134r.life2和filename.c.126r.life1 ,因为我想从这些文件中提取一些值(例如每个方法的寄存器计数)。 问题是,在当前版本的gcc(例如4.2.2)中,此选项不再存在。 还有其他选项,名称为filename.c.135r.jump的树转储几乎相同。 但是这个转储中的寄存器计数也丢失了,我找不到具有该值的转储。 还有一个参数,它给了我当前gcc版本中的旧转储吗?
有可能指示g ++以递归方式搜索头文件的文件夹吗? 在我的例子中,我想要g ++来搜索 / ARDrone_SDK_2_0_1 / ARDroneLib /柔和/ 以及头文件的所有子目录。 可以这样做吗? 这是一个简单的Makefile示例: C=g++ CFLAGS=-c -Wall LDFLAGS= INC1=/ARDrone_SDK_2_0_1/ARDroneLib/Soft/ <- can this be recursive? INCDIRS= -I${INC1} SOURCES=src/dronevid.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=build/dronevid all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $(INCDIRS) $< -o $@
我最近升级到新的编译器Clang LLVM 4.0,它很好。 就在这种情况下,它向我显示了一些旧的遗留代码的丑陋警告: 警告: case value not in enumerated type ‘SomeConstants’ (aka ‘enum SomeConstants’) [-Wswitch] switch (var) { case kConstant: case 3: case 4: case 8: case 35: //WARNING HERE 🙁 // do my thing here break; case kOtherConstant: // do another thing here break; default: break; } var可以是枚举中定义的值之一,如下所示: typedef enum SomeConstants { kConstant, […]
我目前正在尝试使用libssh.dll库来实现应该连接到远程计算机的ac程序。我正在使用gcc来编译程序。 编译此程序时,我收到此错误: i386 architecture of input file ‘libssh/bin/libssh.ddl’ is incompatible with i386:x86-64 output 我尝试用-m32标志编译程序,但后来我收到这些错误: /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.8.2//libgcc_s.dll.a when searching for -lgcc_s /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.8.2//libgcc.a when searching for -lgcc /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../libcygwin.a when searching for -lcygwin /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/libgcc_s.dll.a when searching for -lgcc_s /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/4.8.2//libgcc.a when searching for -lgcc 有任何想法如何解决这个问题?
我写了以下c代码: #include int main () { printf(“%d\n”, -1 >> 8); return 0; } 我使用-m32标志在x86_64上使用gcc 4.6.3编译此代码。 我按照我的预期打印出-1,使用二进制补码表示算术运算得到-1。 现在,如果我改写 printf(“%d\n”, 0xFFFFFFFF >> 8); 我得到16777215.我本来期望这个常量被解释为一个int(有符号),然后转换为算术,这将再次导致-1。 我查看了最新的C标准,我似乎无法理解为什么会这样。 有任何想法吗?
这个小代码汇编了GCC和Clang,但给出了不同的结果: #include int main(){ __int128_t test=10; while(test>0){ int myTest=(int)test; printf(“? %d\n”, myTest); test–; } } 对于GCC,这从预期行为从10减少到1,而对于Clang,它继续计入负数。 对于Clang,如果我用test-=1替换test–那么它也会给出预期的行为。 __int128_t是GCC扩展,因此上述结果仅适用于非标准C,因此在Clang中__int128_t可能“使用后果自负”。 这是Clang中的一个错误,还是我犯了一些我没看到的错误? 编辑:我正在使用gcc(MacPorts gcc48 4.8-20130411_0)4.8.1 20130411(预发布)和Apple clang 4.0版(标签/ Apple / clang-421.0.60)(基于LLVM 3.1svn)。
int i = 3.1 / 2 即使使用-Wall选项也不会引起任何警告。有时,我想知道精确丢失的位置。为什么gcc不支持此警告,而msvc支持这个? 谢谢。 编辑:我的gcc -v显示 Configured with: ../../gcc-4.4.1/configure –prefix=/mingw –build=mingw32 –enable-languages=c,ada,c++,fortran,objc,obj-c++ –disable-nls –disable-win32-registry –enable-libgomp –enable-cxx-flags=’-fno-function-sections -fno-data-sections’ –disable-werror –enable-threads –disable-symvers –enable-version-specific-runtime-libs –enable-fully-dynamic-string –with-pkgversion=’TDM-2 mingw32′ –enable-sjlj-exceptions –with-bugurl=http://www.tdragon.net/recentgcc/bugs.php