반응형

다음 사이트에 있는 Zig 강좌를 따라해보며 포스트를 올려보고 있습니다.

https://zig.guide/



2024. 4. 2  최초작성




다음 포스트를 참고하여 zig 개발 환경을 구성하세요.

 

zig 설치하여 Visual Studio Code 개발환경 만들기 - Windows, Linux, macOS

https://webnautes.tistory.com/2301 



 

zig 강좌를 진행하고 있습니다.

 

zig 강좌 01 - Assignment(대입)

https://webnautes.tistory.com/2304

 

 

zig 강좌 02 - Arrays(배열)

https://webnautes.tistory.com/2305



zig 강좌 03 - if 문

https://webnautes.tistory.com/2306 


 

zig 강좌 04 - while 문

https://webnautes.tistory.com/2308

zig 강좌 05 - for 문

https://webnautes.tistory.com/2309 

 

zig 강좌 06 -함수

https://webnautes.tistory.com/2313 

 

zig 강좌 07 - Defer

https://webnautes.tistory.com/2317

 

 

이번엔 다음 링크에 있는 내용을 정리해봤습니다.  

https://zig.guide/language-basics/if 





Zig에서의 if 문은 부울(bool) 값(즉, true 또는 false)만을 허용합니다. 0이 아닌 모든 값을 true로 간주했던 C언어와 다릅니다. C언어에서 암시적으로 if 문에 있는 값을 부울 값으로 바꾸어서 처리했던 것입니다. 

 

예를 들어 C언어에서는 다음처럼 if 문이 true 또는 false 아닌 값을 조건으로 사용할 수 있었습니다.

 

int num = 5;

if (num) {
    // num이 0이 아니므로 여기에 있는 코드가  실행됩니다.
}




zig에서 if문의 사용법은 C언어와 거의 유사합니다. 하지만 다음처럼 작성하면 에러가 발생합니다.

 

const std = @import("std");

pub fn main() void {
    var a = true;

    if (a) std.debug.print("a는 true 입니다. a={}\n", .{a});
    else std.debug.print("a는 false 입니다. a={}\n", .{a});
}



실행 결과입니다. else 문에서 에러가 발생했다고 나옵니다. 이유는 if 문 다음에 ;을 사용했기 때문입니다. if 문 뒤에 else 문이 따라 온다면 if 문에서 실행하는 코드에 ;을 붙이면 안됩니다. 

 

% zig run main.zig

main.zig:7:5: error: expected statement, found 'else'

    else std.debug.print("a는 false 입니다. a={}\n", .{a});



다음 처럼 if 문에서 실행하는 코드에 있는 ;을 제거하면 문제없이 실행이 됩니다. 하지만 visual studio code를 사용할 경우 zig 확장에서 한줄로 바꿔버리기 때문에 if 문이라 else 문에서 실행되는 코드가 긴 경우에는 불편하겠다 싶습니다. 뒤에서 해결방법을 소개합니다.  

 

const std = @import("std");

pub fn main() void {
    var a = true;

    if (a) std.debug.print("a는 true 입니다. a={}\n", .{a}) else std.debug.print("a는 false 입니다. a={}\n", .{a});
}



실행 결과 변수 a의 값이 true이므로  if문에 있는 print 문이 실행된 것을 볼 수 있습니다. 

 

% zig run main.zig

a는 true 입니다. a=true



만약 if문 뒤에 else 문이 없다면 ;을 붙여주면 됩니다. 

 

const std = @import("std");

pub fn main() void {
    var a = true;

    if (a) std.debug.print("a는 true 입니다. a={}\n", .{a});
}



다음처럼 문제 없이 실행됩니다.

 

% zig run main.zig

a는 ture 입니다. a=true



if 문 뒤에 else 문이오면 ;을 붙여주면 안된다 했습니다. 하지만 if문과 else문에서 실행하는 코드가 긴 경우엔 불편합니다. 또한 한 줄 이상의 코드를 필요한 경우도 있습니다. 이 경우엔 중괄호{}를 사용하면 되는데 구조가  C언어와 똑같습니다.

 

const std = @import("std");

pub fn main() void {
    var a = true;

    if (a) {
        std.debug.print("a는 true 입니다. a={}\n", .{a});
    } else {
        std.debug.print("a는 false 입니다. a={}\n", .{a});
    }
}




반응형

'Zig > Zig 강좌' 카테고리의 다른 글

zig 강좌 06 -함수  (0) 2024.04.10
zig 강좌 05 - for 문  (0) 2024.04.06
zig 강좌 04 - while 문  (0) 2024.04.04
zig 강좌 01 - Assignment(대입)  (0) 2024.04.01
zig 강좌 02 - Arrays(배열)  (0) 2024.03.30

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts