在gcc中使用内置函数__builtin_add_overflow_p

Eag*_*gle 5 c gcc overflow built-in

我想知道如何使用这个函数,因为我这样做时出错了:

#define INT_ADD_OVERFLOW_P(a, b) \
__builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0);
#include <stdio.h>
#include <assert.h>
__int main()
{
    int x1 = -1073741826;
    int y1 = -1073741826;
    int z1 = x1+y1; 
    INT_ADD_OVERFLOW_P ( x1,  y1);
    printf("%d\n",z1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Compile_OUTPUT:

gcc -c -Wall -D DEBUG  tempFile.c
gcc tempFile.o -o tempFile
Makefile:8: recipe for target 'tempFile' failed//new error after update
Run Code Online (Sandbox Code Playgroud)

Compile_ERROR:

tempFile.c: In function ‘main’:
tempFile.c:10:1: warning: implicit declaration of function        ‘__builtin_add_overflow_p’ [-Wimplicit-function-declaration]
tempFile.o: In function `main':
tempFile.c:(.text+0x44): undefined reference to `__builtin_add_overflow_p'
collect2: ld returned 1 exit status
make: *** [tempFile] Error 1
Run Code Online (Sandbox Code Playgroud)

这是我想要使用的函数的链接:

https://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html

这是我正在使用的makefile:

compiler=gcc
CFLAGS=-c -Wall -D DEBUG 
programname=tempFile

all: $(programname)

$(programname): $(programname).o
    $(compiler) $(programname).o -o $(programname)

$(programname).o: $(programname).c
    $(compiler) $(CFLAGS) $(programname).c

clean:
    rm *o $(programname)
Run Code Online (Sandbox Code Playgroud)

Max*_*kov 6

__builtin_add_overflow_p受尚未发布的 GCC 7 支持