반응형
...에 대한 작업이 정의되지 않았을 수 있습니다.
다음과 같은 코드를 가지고 있습니다.
FRAME frameArray[5][10]; // Create the array of frames
int trackBufferFull[5] = {0, 0, 0, 0, 0};// Keeps track of how full the buffer for each node is
int trackFront[5] = {0, 0, 0, 0, 0}; // Array to keep track of which is the front of the array
int trackTail[5] = {0, 0, 0, 0, 0};
// Function to add to the array (CHANGE int frame)
void addFrame (int nodeNumber, FRAME frame)
{
//Calc tail
int tail = trackTail[nodeNumber-1];
// Calc frames in buffer
int framesinBuffer = trackBufferFull[nodeNumber-1];
if (framesinBuffer == 10)
{
printf("Buffer is full\n");
}
else
{
// Add frame to frameArray
frameArray[nodeNumber-1][tail] = frame;
printf("\nAdded a frame in node: %i to the buffer\n", nodeNumber);
// Increment the count
trackBufferFull[nodeNumber-1]++;
trackTail[nodeNumber-1] = ++trackTail[nodeNumber-1] % 10;
}
}
frameArray에 사용하는 어레이는 길이 10의 랩어라운드/사이클 어레이이므로 코드를 가지고 있습니다.
trackTail[nodeNumber-1] = ++trackTail[nodeNumber-1] % 10;
스탠드아론 파일에서는 모든 것이 완벽하게 동작하지만, 큰 파일 내에서 실행하면 다음과 같은 컴파일 오류가 발생합니다.
$ cnet GARETH -m 30
compiling gareth.c
gareth.c: In function ‘addFrame’:
gareth.c:77:27: error: operation on ‘trackTail[nodeNumber + -0x00000000000000001]’ may be undefined [-Werror=sequence-point]
gareth.c: In function ‘removeFirstFrame’:
gareth.c:98:28: error: operation on ‘trackFront[nodeNumber + -0x00000000000000001]’ may be undefined [-Werror=sequence-point]
gareth.c:105:1: error: control reaches end of non-void function [-Werror=return-type]
cc1: all warnings being treated as errors
77번 라인이 회선입니다.
trackTail[nodeNumber-1] = ++trackTail[nodeNumber-1] % 10;
도와 주세요.
회선 번호와 에러를 나란히 표시하기 위해서, 다음의 http://i.imgur.com/wyO5a.png 에 이미지를 업로드 했습니다.
77번 라인이 회선입니다.
trackTail[nodeNumber-1] = ++trackTail[nodeNumber-1] % 10;
변화하고 있다trackTail[nodeNumber-1]
시퀀스 포인트 사이에 2회: 1회 ~++
과제로 한 번.
이것은 정의되지 않은 동작입니다.
해결 방법은 다음과 같이 문장을 바꾸는 것입니다.
trackTail[nodeNumber-1] = (trackTail[nodeNumber-1] + 1) % 10;
또는 다음과 같이 합니다.
trackTail[nodeNumber-1]++;
trackTail[nodeNumber-1] %= 10;
수정하고 있다trackTail[nodeNumber - 1]
시퀀스 포인트 사이에 있습니다.이건 마치 당신이 할당하는 것과 같다.
i = ++i;
정의되지 않은 동작이기도 합니다.
코드를 다음과 같이 변경합니다.
trackTail[nodeNumber - 1] = (trackTail[nodeNumber - 1] + 1) % 10;
trackTail[nodeNumber-1] = ++trackTail[nodeNumber-1] % 10;
네, 에러 메시지에 나타난 대로 정의되지 않은 동작입니다.같은 값을 두 번 수정하려면 시퀀스 포인트가 있어야 합니다.이 경우, 두 가지 증분이 모두 허용되지 않습니다.trackTail[nodeNumber-1]
사용.++
를 사용하여 재할당합니다.=
.
그냥 사용하면+ 1
대신++
정상적으로 동작합니다.
언급URL : https://stackoverflow.com/questions/10623114/operation-on-may-be-undefined
반응형
'programing' 카테고리의 다른 글
MariaDB Galera 클러스터: 운영 서버에서 wresp_sst_method 변경 (0) | 2022.09.13 |
---|---|
PHP/Larabel을 사용하여 MySQL/MariaDB에서 모든 POI를 얻는 데 더 빠른 접근 방식은 무엇입니까? (0) | 2022.09.13 |
브라우저 또는 탭 닫기 감지 (0) | 2022.09.12 |
javascript에서 소수점 2자리 float를 해석하는 방법은? (0) | 2022.09.12 |
사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용). 권한이 없습니다. (0) | 2022.09.12 |