Името на променливата 'xor' води до вътрешна грешка на компилатора 'сегментационна грешка'!

Компилиране на този код

int main(int argc, char **argv)
{
    int xor = 0;
}

чрез

g++ main.cpp 

води до:

internal compiler error: Segmentation fault

с

i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659).

Преименуването на променливата премахва грешката.

Въпрос: gcc от Apple глупости ли са?


person WolfgangP    schedule 03.07.2010    source източник
comment
Изглежда като кандидат за доклад за грешка до екипа на gcc.   -  person yfeldblum    schedule 03.07.2010
comment
За мен на 4.4.1-4ubuntu9 просто дава нормална грешка, очаква се неквалифициран идентификатор преди токена „^“. (xor е псевдоним за ^). Няма грешка в сегментирането.   -  person Matthew Flaschen    schedule 03.07.2010
comment

Първо вземете токена на устройството и го запазете в базата данни, а по-късно може да се използва за изпращане на насочено известие.

document.addEventListener("deviceready", onDeviceReady, false);

    function onDeviceReady(){
     //setting up for android
     if(PushbotsPlugin.isAndroid()){
        PushbotsPlugin.initializeAndroid("PUSHBOTS_APP_ID", "GCM_SENDER_ID");
    }
     //get the device token
    PushbotsPlugin.getToken(function(token){
        console.log(token);
    //setup an ajax request to store the device token
     $.ajax({
      url:'register.php',
      method:"POST",
      data:{token :token},
      success:function(data){
        console.log("from server"+data);
      },
      error:function(err){
       console.log("error"+err);   
     }
    });

    });
}

register.php

 <?php 
    $token=$_POST['token'];
   //setup database query for store the token
   if($query==true){
    echo 'success';
    }else{
      echo 'error';
    }
  ?>

Също така заменете PUSH_BOT_APP_ID и GCM_SENDER_ID с вашите стойности

  -  person Mr_Pouet    schedule 21.01.2014


Отговори (2)


Всеки път, когато вашият компилатор се изправи, това е грешка. Вашият вече намален тестов случай е идеален кандидат за докладване на GCC.

person Clark Gaebel    schedule 03.07.2010
comment
Трябва да се докладва на Apple (developer.apple.com/bugreporter). Те могат най-добре да определят дали това е грешка, която са въвели, или присъства в upstream. Ако е нагоре по веригата, те обикновено ще подадат бъг там. - person Matthew Flaschen; 03.07.2010
comment
Благодаря за намека. Докладвах го на Apple, както и на екипа на gcc. - person WolfgangP; 03.07.2010

and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor и xor_eq са ключови думи, които са активирани с -ansi или -foperator-names

имате ли активиран един от тези превключватели?

вижте също: това

person AndersK    schedule 03.07.2010
comment
@Wolfgang, всъщност не е специфично за g++ или скрито. Стандартът C++ казва, че xor е запазено и използването на запазена дума в друг контекст е недефинирано поведение. Това означава, че всичко може да се случи. Разбира се, за предпочитане е компилаторът да отпечата ясно съобщение за грешка. - person Matthew Flaschen; 03.07.2010
comment
@Matthew Имах предвид това като шега. Използването на логически оператори, посочени в условия, е доста хубава функция, която прави кода по-четлив (особено за колеги, които са свикнали със скриптовите езици), но се съмнявам, че много C++ програмисти знаят или използват това. - person WolfgangP; 03.07.2010