我在编译期间收到以下错误:
error: ‘asm’ undeclared (first use in this function)
EXCHANGE( s, *(a) );
^
Run Code Online (Sandbox Code Playgroud)
在头文件中调用宏,如下所示:
EXCHANGE( s, *(a) );
Run Code Online (Sandbox Code Playgroud)
并且宏的实际定义如下:
#define EXCHANGE(R,M) asm volatile ( "xchg %1, %0" : "+m" (M), "+r" (R) )
Run Code Online (Sandbox Code Playgroud)
宏调用和定义存在于同一个头文件中.出了什么问题?
我正在使用CMAKE来构建项目,CFLAGS如下:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat=2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wswitch-default")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
#-Wno-deprecated-declarations to suppress the deprecation errors with newer version of JSON-C
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wbad-function-cast") …
Run Code Online (Sandbox Code Playgroud) 为我的愚蠢道歉,因为这是我在这个论坛上的第一篇文章.我试图通过以下代码检测包装无符号32位计数器和大负跳转之间的区别,但编译器给我错误:
错误:由于数据类型的范围有限,比较始终为真[-Werror = type-limits]
这是我的代码片段:
#define MAX_BACKWARD_JUMP -4294959295 //UINT_MAX - 8000
#define MIN_BACKWARD_JUMP -3600
#define MAX_FORWARD_JUMP 4800000
signed int rtpDelta; //Signed 32-bit
unsigned int currRTPTs, prevRTPTs; //unsigned 32-bit
rtpDelta = currRTPTs - prevRTPTs;
if ((rtpDelta > MAX_BACKWARD_JUMP && rtpDelta < MIN_BACKWARD_JUMP)
|| (rtpDelta > MAX_FORWARD_JUMP))
{
printf("Delta in Timestamps too large\n",rtpDelta);
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是在RTP时间戳中捕获无效的大型Deltas.我们有一个当前的TimeStamp和一个从对等RTP客户端接收的前一个Timestamp.RTP时间戳的无效值的边界限制是-4294959295 <rtpDelta <-3600,如果Delta小于-3600且大于-4294959295,它应该抛出错误,因为更接近UMAX_INT的值将被视为翻转.我在这做错了什么?
为了在我的提交中包含一些未跟踪的文件,我遵循了这篇文章,并意外地添加了很多不需要的东西。现在我的仓库中有这种情况。
2016-02-02 16:51 Unknown o Staged changes <--- untracked files
2016-02-02 16:51 Unknown o Unstaged changes <-- want to preserve
2016-01-04 17:01 XXXXX YYYYY I [wool_task_conversion] [master] [origin/HEAD] [origin/master] First commit
Run Code Online (Sandbox Code Playgroud)
我现在想将未跟踪的文件恢复到其原始位置,即未暂存区域,就像以前一样保留未暂存区域中跟踪文件的更改。
我对这段代码的输出感到困惑:
#include <stdio.h>
#include <stdlib.h>
#define TIMING_OUTPUT_FILENAME_MAX_LENGTH 40
int main (int argc, char **argv)
{
char *timing_output_filename = malloc(TIMING_OUTPUT_FILENAME_MAX_LENGTH);
printf("requested buffer size is %ld bytes and pointer size is %ld bytes\n",
sizeof(timing_output_filename),
sizeof(*timing_output_filename));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
requested buffer size is 8 bytes and pointer size is 1 bytes
Run Code Online (Sandbox Code Playgroud)
它应该给我40个字节?我错过了什么吗?
我有一个库,当库被编译为独立的二进制文件时,它有自己的命令行参数解析机制,这里是代码:
int main( int argc, char **argv )
{
int result;
argc = wool_init( argc, argv );
....
}
int wool_init( int argc, char **argv )
{
us_elapsed();
argc = decode_options( argc, argv );
.....
}
Run Code Online (Sandbox Code Playgroud)
现在我将这个库静态链接到另一个具有自己的命令行解析机制和参数的库.我想在运行时使用一些参数初始化第一个库,例如我将这些参数传递给mimic命令行:
/* initializing wool run-time environment */
char **woolArg;
*woolArg[0] = "-p 3";
wool_init(1, woolArg);
Run Code Online (Sandbox Code Playgroud)
但我得到了以下错误.
:113:14: error: assignment makes integer from pointer without a cast [-Werror]
*woolArg[0] = "-p 3";
^
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?